Qu'est-ce que Redis?

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 :

  • Performances incroyable, de 100x à 1000x plus rapide qu'un RDBMS.
  • Énorme capacité de requêtes concurrentes.
  • Système de PUB/SUB.
  • Supporte plusieurs types de donnés, incluant des hashs et listes.
  • Clés avec TTL.

Utilisation

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.

Pourquoi utiliser Redis?

Redis est particulièrement utile dans certain cas. Des rôles fréquent pour Redis incluent :

  • Cache centralisé pour un cluster de serveurs, très souvent de serveurs web.
  • Système de communication interne en utilisant le système PUB/SUB.
  • Stockage des données des sessions des client d'une application web.
  • Stockage temporaire de statistiques ou tampon pour un système d'analyse plus lent.
  • Plage de mémoire partagé entre plusieurs processus/serveurs/applications.

Types de donnés

Les types supportés par Redis et leurs commandes.

Opérations avec les clés

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.

  • DEL — Supprime la ou les paires de clé-valeur.
  • EXISTS — Détermine si la clé existe.
  • EXPIRE, EXPIREAT — Assigne le TTL de la clé.
  • PERSIST — Retire le TTL d'une clé.
  • RENAME — Renomme la clé donné.

String, number et binary data

Redis utilise des string pour stocker du text, des nombres et des données binaires. Les strings ont donc leur commandes :

  • APPEND — Ajoute à la fin.
  • DECR, DECRBY — Décrémente la valeur.
  • GET — Retourne la valeur de la clé.
  • INCR, INCRBY — Incrémente la valeur.
  • SET — Assigne la valeur string à la clé.
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

Listes

Les listes contiennent plusieurs string et supportent plusieurs opérations de base :

  • LINDEX — Accède à l'élément à l'index donné.
  • LLEN — Récupère le nombre d'éléments.
  • LRANGE — Récupère une section de la liste.
  • LREM — Supprime un élément.
  • LSET — Assigne une valeur à l'élément.
  • RPOP, LPOP — Retire la valeur au début ou à la fin.
  • RPUSH, LPUSH — Ajoute une valeur au début ou à la fin.
redis 127.0.0.1:6379> RPUSH test "Hello"
(integer) 1
redis 127.0.0.1:6379> LINDEX test 0
"Hello"

Sets

Le sets ressemblent aux listes puisqu'ils servent à stocker des string, mais ont plus de fonctions et ne sont pas ordonnés :

  • SADD — Ajoute une valeur.
  • SCARD — Récupère le nombre de membres.
  • SISMEMBER — Détermine si le set contient une valeur.
  • SMEMBERS — Récupère tous les membres.
  • SREM — Supprime un élément.
redis 127.0.0.1:6379> SADD test "Hello"
(integer) 1
redis 127.0.0.1:6379> SMEMBERS test
1) "Hello

Hashes

Les hashs sont des sous-ensembles de paires clé-valeur. Ils supportent donc des commandes similaires à celles de Redis lui-même :

  • HDEL — Supprime un élément.
  • HEXISTS — Détermine si un élément existe.
  • HGET, HGETALL, HMGET — Récupère la valeur d'un élément.
  • HKEYS — Récupère toutes les clés.
  • HLEN — Récupère le nombre d'éléments.
  • HSET, HMSET — Assigne une valeur à un élément.
  • HVALS — Récupère toutes les valeurs.
redis 127.0.0.1:6379> HSET test hello "World"
(integer) 1
redis 127.0.0.1:6379> HGET test hello
"World"

Système PUB/SUB

Notifications d'activité sur le serveur entre les clients.

Le système PUB/SUB

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é.

  • PUBLISH — Envoie un message dans le canal.
  • SUBSCRIBE — Inscription au canal.
  • UNSUBSCRIBE — Désinscription au canal.

Exemple d'utilisation de PUB/SUB

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"

<Merci!>

Informations de contact: