La publication de la version 8.4 du SGBD Redis, appartenant à la classe des systèmes NoSQL, est annoncée. Redis fournit des fonctionnalités pour le stockage de données au format clé/valeur, complétées par le support de 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 en Lua côté serveur. Le code du projet est écrit en langage C et est distribué sous la licence AGPLv3.
La base de données Redis prend en charge des transactions, permettant d'exécuter un groupe de commandes en une seule étape, garantissant la cohérence et la séquentialité (les commandes d'autres requêtes ne peuvent pas se glisser) de l'exécution d'un ensemble donné de commandes, et en cas de problème, permettant d'annuler les modifications. Toutes les données sont complètement mises en cache en mémoire vive. Des bibliothèques clients sont disponibles pour la plupart des langages populaires, y compris Perl, Python, PHP, Java, Ruby et Tcl.
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.
Modifications clés dans Redis 8.4 :
- Ajout de la commande « FT.HYBRID » qui met en œuvre la recherche hybride, combinant dans une seule requête les capacités de recherche textuelle intégrale et vectorielle, tenant compte à la fois des correspondances directes et de la proximité sémantique. Les capacités d'agrégation des résultats sont supportées avec une syntaxe similaire à celle de la commande « FT.AGGREGATE ».
- Augmentation de la bande passante dans les applications typiques de Redis pour le caching. Par exemple, pour des charges impliquant 10 % d'opérations d'écriture (SET) et 90 % d'opérations de lecture (GET) avec un stockage de valeurs de chaîne de 1 Ko, l'augmentation de la bande passante est de 30 %.

- Amélioration des performances des opérations de recherche (FT.SEARCH) et d'agrégation des résultats (FT.AGGREGATE). Dans les systèmes sous forte charge avec un grand nombre de requêtes parallèles, il y a une augmentation de la bande passante et une réduction des latences jusqu'à 4,7 fois lors de la recherche et jusqu'à 1,4 fois lors de l'agrégation des résultats.

- Optimisation de l'allocation de mémoire lors de l'exécution des requêtes et possibilité de configurer le comportement en cas d'épuisement de la mémoire disponible (OOM, out-of-memory).
- Réduction de la consommation de mémoire lors du stockage de petites chaînes (jusqu'à 7 octets) dans des structures de type JSON. Par exemple, un tableau en JSON contenant 500 petits éléments au format clé/valeur nécessite désormais 37 % de mémoire en moins.
- Efficacité accrue du stockage des tableaux numériques JSON, tous les éléments ayant un type commun (alors qu'auparavant, chaque élément de ce type de tableau conservait à la fois le type et la valeur, maintenant le type est conservé une seule fois pour tout le tableau). Dans un test réalisé, de tels tableaux avec un million d'éléments homogènes nécessitent désormais entre 50 et 92 % de mémoire en moins selon le type.
- La commande SET a été ajoutée d'options IFEQ, IFNE, IFDEQ et IFDNE, permettant de mettre à jour une clé de chaîne avec une seule commande dans des situations où la valeur qui lui est associée n'a pas été modifiée par un autre client depuis son extraction.
- Ajout de la commande XDELEX pour la suppression atomique d'une clé de chaîne, si la valeur associée n'a pas changé depuis l'extraction.
- Ajout de la commande DIGEST, renvoyant le hachage de la valeur associée à la clé spécifiée.
- Une option « CLAIM » a été ajoutée à la commande XREADGROUP pour lire à la fois les messages en attente (idle pending) et ceux reçus (incoming).
- Ajout de la commande MSETEX pour définir ou mettre à jour plusieurs clés de chaîne de manière atomique, tout en mettant à jour leur durée de vie.
- Ajout d'un mécanisme de migration atomique des slots entre les nœuds du cluster (ASM - Atomic Slot Migration), similaire à la réplication synchrone complète, mais fonctionnant au niveau des slots de stockage de données individuels. Une commande CLUSTER MIGRATION a été ajoutée pour importer des slots d'autres nœuds, suivre les progrès de la migration et marquer les opérations de migration en attente si nécessaire.
- Ajout de la commande CLUSTER SLOT-STATS pour évaluer la statistique du cluster par rapport à des slots individuels, tels que le nombre de clés, la charge CPU et l'entrée/sortie réseau.
Source : opennet.ru


