Redis (Remote Dictionary Server) est une base de données clé-valeur en mémoire, utilisée comme cache distribué et courtier de messages, avec une durabilité optionnelle. Parce qu'elle conserve toutes les données en mémoire et grâce à sa conception, Redis offre des lectures et écritures à faible latence, ce qui la rend particulièrement adaptée aux cas d'utilisation nécessitant un cache. Le projet a été développé et maintenu par Salvatore Sanfilippo, à partir de 2009, et a évolué à travers plusieurs parrainages et changements de licence pour devenir un composant d'infrastructure de données largement adopté.
Redis fonctionne à la fois comme un magasin de données et un cache, se distinguant des systèmes de gestion de bases de données relationnelles (SGBDR) traditionnels. Son modèle de données est basé sur des types de données abstraits plutôt que sur des requêtes SQL, et il est optimisé pour une récupération directe sans index secondaires ni agrégations. Cette conception, combinée à son fonctionnement en mémoire, permet des temps de réponse inférieurs à la milliseconde pour de nombreuses charges de travail.
Historique
Le projet Redis a commencé lorsque Salvatore Sanfilippo (surnommé antirez) tentait d'améliorer l'évolutivité de sa startup italienne et a développé un analyseur de journaux Web en temps réel. Après avoir rencontré des problèmes significatifs pour faire évoluer certains types de charges de travail avec des systèmes de bases de données traditionnels, Sanfilippo a commencé en 2009 à prototyper une première version de preuve de concept de Redis en Tcl. Plus tard, Sanfilippo a traduit ce prototype en langage C et a implémenté le premier type de données, la liste. Après quelques semaines d'utilisation interne réussie du projet, Sanfilippo a décidé de le rendre open source, en annonçant le projet sur Hacker News. Le projet a commencé à gagner en traction, en particulier auprès de la communauté Ruby, GitHub et Instagram étant parmi les premières entreprises à l'adopter.
Sanfilippo a été embauché par VMware en mars 2010. En mai 2013, Redis a été parrainé par Pivotal Software (une scission de VMware). En juin 2015, le développement est devenu parrainé par Redis Ltd. En octobre 2018, Redis 5.0 a été publié, introduisant Redis Stream, une nouvelle structure de données permettant le stockage de plusieurs champs et valeurs de chaînes avec une séquence automatique basée sur le temps à une seule clé. En juin 2020, Sanfilippo a quitté son poste de mainteneur unique de Redis, succédé par Yossi Gottlieb et Oran Agra. Sanfilippo est revenu chez Redis en décembre 2024.
Évolution des licences
En août 2018, pour contrôler l'utilisation du logiciel par les fournisseurs de cloud gérés sans compensation adéquate, Redis Ltd. a annoncé qu'elle réattribuerait les modules Redis optionnels de la licence publique générale GNU Affero (AGPL) à la licence Apache, mais sous réserve d'un addendum connu sous le nom de « Commons Clause » qui restreint l'utilisation commerciale. Cela a rendu les modules disponibles en code source et non plus libres. Le logiciel de base Redis est resté sous licence BSD, Redis Ltd. s'engageant à maintenir ces conditions.
En février 2019, citant la confusion sur les conditions de licence, les conditions de licence Apache avec Commons Clause pour les modules Redis ont été remplacées par la « Redis Source Available License » (RSAL), qui interdit explicitement l'utilisation commerciale des modules dans le cadre d'« une base de données, un moteur de cache, un moteur de traitement de flux, un moteur de recherche, un moteur d'indexation ou un moteur de service ML/DL/AI ». La dernière révision des modules sous une licence libre et open source a été forkée par des membres de la communauté sous le nom de projet GoodFORM.
En mars 2024, Redis Ltd. a annoncé qu'à partir de la version 7.4, le logiciel de base Redis serait réattribué sous la RSAL et la licence publique côté serveur (SSPL), toutes deux disponibles en code source et non libres. La Linux Foundation a ensuite annoncé qu'elle forkerait la dernière version sous licence BSD de Redis sous le nom de Valkey. En mai 2025, Redis Ltd. a annoncé qu'elle changerait à nouveau la licence pour l'AGPL à partir de la version 8.0, citant que les forks avaient atteint leur objectif de créer un « terrain de jeu équitable » de produits différenciés, et que Redis avait connu une « croissance record » depuis le changement de licence.
Modèle de données et types
Redis mappe des clés à des types de valeurs. Redis prend en charge un certain nombre de types de données, notamment les chaînes, les documents JavaScript Object Notation (JSON), les hachages (une collection de champs, chaque champ étant une paire nom-valeur de chaînes), les listes, les ensembles, les ensembles vectoriels, et plus encore. Cette variété permet aux développeurs de modéliser divers scénarios d'application directement dans Redis, des simples recherches clé-valeur aux structures de données complexes comme les ensembles triés pour les classements ou les index géospatiaux.
Le moteur de requêtes Redis permet aux utilisateurs d'utiliser Redis comme base de données documentaire, base de données vectorielle, index secondaire et moteur de recherche. Avec le moteur de requêtes Redis, les utilisateurs peuvent définir des index pour les documents de hachage et JSON, et utiliser un langage de requête riche pour la recherche vectorielle, la recherche en texte intégral, les requêtes géospatiales et les agrégations. Cela étend Redis au-delà d'un simple cache vers une plateforme de données multi-modèles, prenant en charge les applications modernes qui nécessitent des capacités de requête flexibles.
Messagerie et transactions
Redis Pub/Sub (abréviation de publish/subscribe) est une capacité de messagerie légère. Les éditeurs envoient des messages à un canal, et les abonnés reçoivent des messages de ce canal. Ce modèle est couramment utilisé pour les notifications en temps réel, les systèmes de chat et les architectures pilotées par événements où des composants découplés doivent communiquer de manière asynchrone.
Une transaction Redis permet l'exécution d'un groupe de commandes en une seule étape. Une requête envoyée par un autre client ne sera jamais servie pendant l'exécution d'une transaction. Cela garantit que les commandes sont exécutées comme une opération isolée unique. Les transactions Redis sont basées sur un modèle de mise en file d'attente et d'exécution, où les commandes sont mises en file d'attente puis exécutées séquentiellement sans interruption, garantissant l'atomicité du lot.
Les utilisateurs de Redis peuvent également télécharger et exécuter des scripts Lua sur le serveur. Cette fonctionnalité permet d'effectuer des opérations complexes de manière atomique côté serveur, réduisant les allers-retours réseau et garantissant la cohérence. La scriptation Lua est particulièrement utile pour implémenter une logique métier personnalisée qui doit s'exécuter près des données.
Persistance et durabilité
Redis conserve généralement l'ensemble du jeu de données en mémoire. Les versions jusqu'à 2.4 pouvaient être configurées pour utiliser ce qu'elles appellent la mémoire virtuelle, où une partie du jeu de données est stockée sur disque, mais cette fonctionnalité est obsolète. La persistance dans Redis peut être réalisée par deux méthodes différentes : la capture instantanée, où le jeu de données est transféré de manière asynchrone de la mémoire au disque à intervalles réguliers sous forme de vidage binaire, en utilisant le format de fichier de vidage RDB de Redis ; ou la journalisation, où un enregistrement de chaque opération modifiant le jeu de données est ajouté à un fichier en ajout seul (AOF) dans un processus en arrière-plan. Redis peut réécrire le fichier en ajout seul en arrière-plan pour le compacter et réduire le temps de récupération.
L'implémentation de Redis utilise l'appel système fork pour dupliquer le processus contenant les données. Cela permet au processus parent de continuer à servir les clients pendant que le processus enfant persiste les données en mémoire sur disque. Cette conception minimise les temps d'arrêt pendant les opérations de persistance et est un facteur clé de la capacité de Redis à maintenir une haute disponibilité tout en garantissant la durabilité des données.
Différences avec les autres systèmes de bases de données
Redis est un système qui fonctionne à la fois comme un magasin de données et un cache. Les données sont modifiées et lues depuis la mémoire principale de l'ordinateur tout en étant également persistées sur disque dans un format optimisé pour l'accès séquentiel plutôt que l'accès aléatoire. Les données formatées ne sont reconstruites en mémoire qu'au redémarrage du système. Cette approche contraste avec les bases de données traditionnelles qui reposent principalement sur un stockage sur disque et des modèles d'accès aléatoire.
Redis utilise un modèle de données qui diffère des systèmes de gestion de bases de données relationnelles (SGBDR). Les commandes spécifient des opérations sur des types de données abstraits plutôt que des requêtes à exécuter par un moteur de base de données. Les données sont stockées dans des structures conçues pour une récupération directe. Il ne repose pas sur des index secondaires, des agrégations ou d'autres fonctionnalités courantes dans les SGBDR traditionnels. Cette simplicité et cette focalisation sur le fonctionnement en mémoire rendent Redis exceptionnellement rapide pour des modèles d'accès spécifiques, mais cela signifie également que les requêtes analytiques complexes sont mieux adaptées à d'autres systèmes.
Utilisation moderne et écosystème
Au 1er mai 2025, pour toutes les versions de Redis à partir de la 8.0, tous les types de données sont inclus dans le même package et disponibles sous la licence Redis Source Available License v2. Auparavant, certains types de données étaient séparés et donc disponibles sous différentes licences. Cette consolidation simplifie le déploiement et les licences pour les utilisateurs, faisant de Redis une plateforme plus cohérente.
Redis est devenu un composant fondamental dans de nombreuses piles technologiques, souvent utilisé aux côtés de fournisseurs de cloud et grandes plateformes cloud pour la mise en cache, la gestion de sessions et l'analyse en temps réel. Ses caractéristiques de faible latence le rendent également adapté aux applications d'IA et de apprentissage automatique nécessitant un accès rapide aux données pour le service de modèles ou les magasins de caractéristiques. Le support de la recherche vectorielle par le moteur de requêtes Redis s'aligne sur la demande croissante pour les applications d'IA générative et de grands modèles de langage qui reposent sur la recherche de similarité sur des plongements.