La sociĂ©tĂ© Redis Ltd a annoncĂ© un changement de sa politique de licence pour le projet. Ă partir de la version 8.0 de Redis, le code du projet est dĂ©sormais disponible sous la licence libre AGPLv3. Le passage Ă une licence ouverte a Ă©tĂ© rendu possible grĂące au retour de Salvatore Sanfilippo, le crĂ©ateur de la base de donnĂ©es Redis, au sein de l'entreprise. AprĂšs son dĂ©part de Redis Ltd, Salvatore avait dĂ©veloppĂ© un ensemble d'extensions vectorielles (Vector Sets), qu'il Ă©tait prĂȘt Ă intĂ©grer dans Redis, mais souhaitait que le code qu'il avait créé soit fourni sous une licence ouverte. Salvatore a rĂ©ussi Ă convaincre ses collĂšgues de la pertinence de rĂ©tablir la nature ouverte du projet et d'amĂ©liorer l'interaction avec la communautĂ©.
Rowan Trollope, directeur de Redis Ltd, a déclaré que la transition l'année derniÚre vers des licences propriétaires avait atteint son objectif, car les entreprises AWS et Google ont créé un fork, ont commencé à participer au développement collaboratif et à partager leurs travaux précédents. Cependant, ce changement de licences a nui aux relations avec la communauté, que l'entreprise tentera désormais de rétablir en revenant à la fourniture du code sous une licence libre.
AprÚs le passage à des licences propriétaires, le développement de la base de code ouverte de Redis a continué dans les forks Valkey (un fork développé avec la participation d'Amazon, Google, Oracle, Ericsson et Snap), Redict (un fork de l'auteur de l'interface utilisateur Sway et du langage Hare), Garnet (une base de données de Microsoft compatible avec Redis) ou KeyDB (un fork haute performance de Redis 5 développé par Snapchat). Dans les dépÎts des distributions Debian 13, Ubuntu 24.10, Fedora 41, RHEL 10, Azure Linux 3, Arch Linux et Alpine 3.20, le paquet Redis a été remplacé par le fork Valkey.
Initialement, Redis Ă©tait distribuĂ© sous une licence permissive BSD, autorisant les modifications sans obligation de les divulguer. Il est ensuite passĂ© Ă des licences propriĂ©taires RSALv2 (Redis Source Available License v2) et SSPLv1 (Server Side Public License v1). Ă partir de Redis 8, le code du projet est disponible sous la licence AGPLv3, qui se distingue par des restrictions pour les applications fournissant des services rĂ©seau. Lorsque des composants AGPL sont utilisĂ©s dans des services rĂ©seau, le dĂ©veloppeur est tenu de fournir Ă l'utilisateur le code source de toutes les modifications apportĂ©es Ă ces composants, mĂȘme si le logiciel sous-jacent n'est pas distribuĂ© et est utilisĂ© exclusivement dans une infrastructure interne pour faire fonctionner le service. La licence AGPLv3 est compatible avec la GPLv3, mais est en conflit avec la GPLv2.
Les licences SSPL et RSAL prĂ©cĂ©demment utilisĂ©es conduisaient Ă la discrimination de certaines catĂ©gories d'utilisateurs, ce qui ne permettait pas de les considĂ©rer comme ouvertes ou libres. Dans leurs objectifs, les deux licences se ressemblent, les diffĂ©rences se rĂ©sumant au fait que la licence SSPL est basĂ©e sur la licence copyleft AGPLv3, tandis que la licence RSAL est basĂ©e sur la licence permissive BSD. La licence RSAL permet d'utiliser, de modifier, de distribuer et d'intĂ©grer le code dans des applications, sauf lorsque ces applications sont commerciales ou utilisĂ©es pour fournir des services gĂ©rĂ©s payants. La licence SSPL contient en outre l'exigence de fournir, sous la mĂȘme licence, non seulement le code de l'application elle-mĂȘme, mais aussi les textes sources de tous les composants impliquĂ©s dans la fourniture du service cloud.
En mĂȘme temps que l'annonce du changement de licence, la version Redis 8.0 a Ă©tĂ© publiĂ©e. Cependant, malgrĂ© l'annonce de la disponibilitĂ© de la version, le rĂ©fĂ©rentiel ne contient pour l'instant qu'un candidat de version, et le lien pour tĂ©lĂ©charger Redis 8.0 sur le site du projet mĂšne Ă une page dĂ©crivant le processus d'installation en gĂ©nĂ©ral. La note de version indique Ă©galement pour l'instant uniquement le lancement de 8.0-RC1.
Principales modifications dans Redis 8.0 :
- Un type de stockage pour les ensembles de données vectorielles, requis dans les systÚmes d'apprentissage automatique et de recherche sémantique, a été ajouté. Les ensembles de vecteurs (vector set) étendent la fonctionnalité précédemment disponible des listes triées (sorted set) en permettant le stockage de vecteurs multidimensionnels. Pour manipuler les données vectorielles, 11 nouvelles commandes ont été ajoutées, telles que VADD, VREM et VSIM.
- Les modules Redis Query Engine, JSON, Time Series et Probabilistic Data Types, prĂ©cĂ©demment fournis sous forme d'extensions sĂ©parĂ©es de Redis Stack, ont Ă©tĂ© intĂ©grĂ©s au cĆur de Redis.
- La prise en charge de la structure de donnĂ©es JSON a Ă©tĂ© intĂ©grĂ©e, permettant de stocker des documents au format JSON en lien avec des clĂ©s dans Redis. Pour l'extraction sĂ©lective de documents JSON et l'accĂšs Ă des Ă©lĂ©ments individuels, le langage de requĂȘte JSONPath peut ĂȘtre utilisĂ©. La prise en charge des mises Ă jour atomiques permet d'apporter des modifications Ă des champs spĂ©cifiques d'un document JSON sans avoir Ă charger l'intĂ©gralitĂ© du document.
- La prise en charge de structures de donnĂ©es sous forme de sĂ©ries temporelles a Ă©tĂ© ajoutĂ©e (un enregistrement constitue le temps et un ensemble de valeurs y correspondant, par exemple, obtenues par interrogation pĂ©riodique de l'Ă©tat des capteurs ou collecte de mĂ©triques). Pour rĂ©duire la consommation de mĂ©moire, des algorithmes de compression de ces donnĂ©es ont Ă©tĂ© mis en Ćuvre et la possibilitĂ© de dĂ©finir des rĂšgles de dĂ©cimation des donnĂ©es archivĂ©es (downsampling) a Ă©tĂ© fournie.
- Des structures de données probabilistes ont été ajoutées : filtre de Bloom, filtre de Cuckoo, sketch Count-min, Top-k et t-digest, permettant de réduire considérablement la taille de stockage lors de la nécessité de conserver de trÚs grands volumes de données, au prix d'une perte de précision lors de certaines opérations. Le « filtre de Bloom » et le « filtre de Cuckoo » permettent de vérifier l'appartenance à un ensemble, en admettant de fausses détections d'éléments manquants, mais en excluant le passage d'un élément existant. Le « sketch Count-min » prévoit le nombre de mentions d'une valeur dans un ensemble. Le « Top-k » permet de trouver les valeurs les plus fréquentes. Le « t-digest » permet d'effectuer des échantillons de valeurs, supérieures ou inférieures à une valeur donnée.
- Le moteur « Redis Query Engine » a été intégré, prenant en charge la recherche vectorielle et offrant des possibilités de filtrage basé sur le contenu plutÎt que sur les clés. Redis Query Engine permet de créer des index supplémentaires pour les données stockées dans des hachages et des documents JSON.
- La prise en charge des ACL (Listes de ContrÎle d'AccÚs) a été élargie, permettant de gérer l'accÚs aux données sur la base de clés et permettant de définir différents ensembles de rÚgles d'accÚs aux commandes avec la possibilité de lier des ensembles de privilÚges à chaque utilisateur. Par exemple, avec les ACL, il est possible de déterminer quels utilisateurs peuvent se connecter à Redis, quels clés un utilisateur peut accéder et quelles commandes il peut exécuter. Redis 8 a ajouté de nouvelles catégories d'ACL pour de nouvelles structures de données.
- Nouvelles commandes ajoutées pour travailler avec des hachages :
- HGETDEL â dĂ©livrer et supprimer des champs d'un hachage en fonction de la clĂ© spĂ©cifiĂ©e.
- HGETEX â dĂ©livrer des champs d'un hachage en fonction de la clĂ© spĂ©cifiĂ©e et indiquer leur durĂ©e de vie.
- HSETEX â dĂ©finir des champs d'un hachage en fonction de la clĂ© spĂ©cifiĂ©e et indiquer leur durĂ©e de vie.
- Plus de 30 optimisations de performance ont Ă©tĂ© apportĂ©es, entraĂźnant dans certains tests une accĂ©lĂ©ration de l'exĂ©cution des commandes de 87%, une augmentation de la capacitĂ© de traitement de 112%, une accĂ©lĂ©ration de la rĂ©plication de 18% et une accĂ©lĂ©ration des rĂ©cupĂ©rations dans le Redis Query Engine jusqu'Ă 16 fois (grĂące Ă la mise Ă l'Ă©chelle horizontale et verticale). Lors de l'exĂ©cution d'un ensemble de 149 tests, 90 commandes ont Ă©tĂ© exĂ©cutĂ©es plus rapidement. La capacitĂ© de traitement a considĂ©rablement augmentĂ© grĂące Ă la transition vers un fonctionnement multi-thread des composants pour le parsing des commandes, le traitement des requĂȘtes clients, la lecture et l'Ă©criture dans les sockets rĂ©seau. Une nouvelle implĂ©mentation du mĂ©canisme de traitement multi-thread des entrĂ©es/sorties (io-threads) a Ă©tĂ© proposĂ©e.
- Un nouveau mĂ©canisme de rĂ©plication a Ă©tĂ© prĂ©sentĂ©, consommant 35% de mĂ©moire en moins et fonctionnant 18% plus rapidement. Pour Ă©viter les blocages, deux flux de rĂ©plication sĂ©parĂ©s ont Ă©tĂ© impliquĂ©s : un pour transmettre les modifications au nĆud principal et un autre pour transmettre les modifications aux nĆuds intermĂ©diaires.
Pour gĂ©rer les donnĂ©es dans la base de donnĂ©es Redis, des commandes telles que l'incrĂ©ment/dĂ©crĂ©ment, les opĂ©rations standard sur les listes et les ensembles (union, intersection), le renommage des clĂ©s, les sĂ©lections multiples et les fonctions de tri sont fournies. Deux modes de stockage sont supportĂ©s : la synchronisation pĂ©riodique des donnĂ©es sur disque et la tenue d'un journal des modifications sur disque. Dans le second cas, l'intĂ©gralitĂ© des modifications est garantie. Les transactions sont supportĂ©es, permettant d'exĂ©cuter en une seule Ă©tape un groupe de commandes, garantissant la cohĂ©rence et la sĂ©quentialitĂ© (les commandes d'autres requĂȘtes ne peuvent pas s'intercaler) de l'exĂ©cution d'un ensemble donnĂ© de commandes, tout en permettant d'annuler les modifications en cas de problĂšme.
Il est possible d'organiser une réplication master-slave des données sur plusieurs serveurs, réalisée en mode non-bloquant. Un mode de messagerie 'publication/abonnement' est également disponible, dans lequel un canal est créé, les messages de celui-ci étant diffusés aux clients abonnés. L'ensemble des données est complÚtement mis en cache en mémoire vive. Des bibliothÚques clientes sont disponibles pour la plupart des langages populaires, y compris Perl, Python, PHP, Java, Ruby, Tcl, JavaScript/Node.js, Go et C#.
Source : opennet.ru
