Redis est un serveur de clé-valeur en mémoire. Redis ne connait aucun concept de tables, documents, relations, joins et même indexes. Une valeur n'est accessible que si l'on connait sa clé.
Redis n'est pas un RDBMS, ni une base de données document et n'essaie pas de l'être ou de les remplacer.
Un tel système semble inutile, mais il est en fait très utile, surtout considérant les fonctions que Redis possède :
Il est possible d'utiliser Redis avec l'outil en ligne de commande redis-cli :
$ redis-cli redis 127.0.0.1:6379>
Il existe aussi des clients pour une grande partie des langages de programmation (incluant LISP, Erlang et même HaXe/Neko). Par contre, considérant la nature de Redis, la création d'un ODM n'est pas vraiment possible.
Redis est particulièrement utile dans certain cas. Des rôles fréquent pour Redis incluent :
Avant tout, les clé sont le point de référence pour tout. Il est donc possible d'effectuer certaines opérations avec eux, peu importe leur valeur.
Redis utilise des string pour stocker du text, des nombres et des données binaires. Les strings ont donc leur commandes :
redis 127.0.0.1:6379> SET test 1 OK redis 127.0.0.1:6379> GET test "1" redis 127.0.0.1:6379> INCR test (integer) 2
Les listes contiennent plusieurs string et supportent plusieurs opérations de base :
redis 127.0.0.1:6379> RPUSH test "Hello" (integer) 1 redis 127.0.0.1:6379> LINDEX test 0 "Hello"
Le sets ressemblent aux listes puisqu'ils servent à stocker des string, mais ont plus de fonctions et ne sont pas ordonnés :
redis 127.0.0.1:6379> SADD test "Hello" (integer) 1 redis 127.0.0.1:6379> SMEMBERS test 1) "Hello
Les hashs sont des sous-ensembles de paires clé-valeur. Ils supportent donc des commandes similaires à celles de Redis lui-même :
redis 127.0.0.1:6379> HSET test hello "World" (integer) 1 redis 127.0.0.1:6379> HGET test hello "World"
Probablement un des plus gros avantages de Redis est le système publish-subscribe. Ce système permet à un client de s'inscrire à un canal et d'être notifié lorsqu'un autre client publie sur le même canal.
Il est donc possible d'éviter d'interroger la base de donnée périodiquement pour savoir s'il y a des changements, il suffit au client qui commet la modification de publier dans le canal approprié pour notifier tous les clients concerné.
Sur le client 1 :
redis 127.0.0.1:6379> SUBSCRIBE test Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "test" 3) (integer) 1
Par la suite sur le client 2 :
redis 127.0.0.1:6379> PUBLISH test "Hello" (integer) 1
Le client 1 reçoit aussitôt automatiquement le message sans intervention :
1) "message" 2) "test" 3) "Hello"
Informations de contact: