La version 7.0 de la base de données Redis, qui appartient à la catégorie des systèmes NoSQL, a été publiée. Redis offre des fonctions de stockage des données au format clé/valeur, avec un support étendu pour des formats de données structurés tels que les listes, les hachages et les ensembles, ainsi que la possibilité d'exécuter des scripts de traitement sur le serveur en utilisant le langage Lua. Le code du projet est distribué sous la licence BSD. Des modules supplémentaires, qui offrent des capacités étendues pour les utilisateurs d'entreprise, tels que RediSearch, RedisGraph, RedisJSON, RedisML, RedisBloom, sont fournis depuis 2019 sous la licence propriétaire RSAL. Le développement d'alternatives ouvertes pour ces modules sous la licence AGPLv3 a été tenté par le projet GoodFORM, qui est actuellement en stagnation.
Contrairement aux systèmes de stockage en mémoire vive tels que Memcached, Redis garantit un stockage persistant des données sur disque et assure l'intégrité de la base de données en cas d'arrêt inopiné. Les sources du projet sont distribuées sous la licence BSD. Des bibliothèques clientes sont disponibles pour la plupart des langages populaires, y compris Perl, Python, PHP, Java, Ruby et Tcl. Redis prend en charge les transactions, permettant d'exécuter un ensemble de commandes en une seule étape, garantissant la cohérence et la séquentialité (les commandes d'autres requêtes ne peuvent pas interférer) de l'exécution de ce groupe de commandes, et en cas de problème, permettant de revenir en arrière. Toutes les données sont entièrement mises en cache en mémoire vive.
Pour la gestion des données, des commandes telles que l'incrémentation/décrémentation, les opérations standard sur des listes et des ensembles (union, intersection), le renommage des clés, les échantillonnages multiples et les fonctions de tri sont fournies. Deux modes de stockage sont pris en charge : la synchronisation périodique des données sur le disque et la tenue d'un journal des modifications sur le disque. Dans le second cas, toutes les modifications sont entièrement conservées. Une organisation de réplication de données maître-esclave est également possible serveurs, réalisée en mode non-bloquant. Un mode de messagerie 'publication/abonnement' est également disponible, où un canal est créé, dont les messages sont distribués aux clients abonnés.
Principales modifications dans Redis 7.0 :
- Ajout de la prise en charge des fonctions exécutées côté serveur. de serveursContrairement aux scripts précédemment pris en charge en langage Lua, les fonctions ne sont pas liées à l'application et visent à mettre en œuvre une logique supplémentaire, élargissant les capacités du serveur. Les fonctions sont traitées de manière indissociable avec les données et sont liées à la base de données, et non à l'application, y compris la réplication et le stockage dans un stockage permanent.
- Une deuxième version de l'ACL a été proposée, permettant de gérer l'accès aux données basé sur des clés et permettant de définir différents ensembles de règles d'accès aux commandes avec la possibilité d'associer plusieurs sélecteurs (ensembles de privilèges) à chaque utilisateur. Chaque clé peut être associée à des privilèges spécifiques, par exemple, il est possible de limiter l'accès en lecture ou en écriture à un sous-ensemble de clés particulier.
- Une implémentation en cluster de la paradigme de diffusion de messages par abonnement (Publish-Subscribe) a été fournie, où un message est envoyé à un nœud spécifique auquel un canal de messages est associé, puis ce message est redirigé vers les autres nœuds faisant partie de la section (shard). Les clients peuvent recevoir des messages en s'abonnant à un canal, que ce soit en se connectant au nœud principal ou aux nœuds secondaires de la section. La gestion se fait à l'aide des commandes SSUBSCRIBE, SUNSUBSCRIBE et SPUBLISH.
- Ajout de la prise en charge du traitement des sous-commandes dans la plupart des contextes.
- De nouvelles commandes ont été ajoutées :
- ZMPOP, BZMPOP.
- LMPOP, BLMPOP.
- SINTERCARD, ZINTERCARD.
- SPUBLISH, SSUBSCRIBE, SUNSUBSCRIBE, PUBSUB SHARDCHANNELS/SHARDNUMSUB.
- EXPIRETIME, PEXPIRETIME.
- EVAL_RO, EVALSHA_RO, SORT_RO.
- FUNCTION *, FCALL, FCALL_RO.
- COMMAND DOCS, COMMAND LIST.
- LATENCY HISTOGRAM.
- CLUSTER SHARDS, CLUSTER LINKS, CLUSTER DELSLOTSRANGE, CLUSTER ADDSLOTSRANGE.
- CLIENT NO-EVICT.
- ACL DRYRUN.
- Il est désormais possible de traiter plusieurs configurations en un seul appel CONFIG SET/GET.
- Des options «—json», «-2», «—scan», «—functions-rdb» ont été ajoutées à l'utilitaire redis-cli.
- Par défaut, l'accès des clients aux paramètres et commandes affectant la sécurité est désactivé (par exemple, les commandes DEBUG et MODULE sont désactivées, et la modification des configurations avec le drapeau PROTECTED_CONFIG est interdite). L'exportation dans un fichier de l'historique des commandes contenant des données sensibles a été interrompue dans redis-cli.
- Un grand nombre d'optimisations a été apporté, visant à améliorer les performances et à réduire la consommation de mémoire. Par exemple, une réduction significative de la consommation de mémoire a été réalisée lors de l'activation du mode cluster, lors des opérations copy-on-write et lors du travail avec des hachages et des clés zset. La logique de vidage des données sur le disque (appel fsync) a été améliorée. Le nombre de paquets réseau et d'appels système lors de l'envoi de réponses au client a été réduit. L'efficacité de la réplication a été accrue.
- Vulnérabilité CVE-2022-24735 corrigée dans l'environnement d'exécution des scripts Lua, permettant de substituer son propre code Lua et de l'exécuter dans le contexte d'un autre utilisateur, y compris celui ayant des privilèges plus élevés.
- Vulnérabilité CVE-2022-24736 corrigée, permettant de causer un arrêt inopiné du processus redis-server en raison d'un dereferencement de pointeur nul. L'attaque se produit via le chargement de scripts Lua spécialement conçus.
Source : opennet.ru
