638 votes

Qu'est-ce que Redis et à quoi ça sert?

J'ai vu des mentions de redis plusieurs fois et j'ai fait des recherches et parcouru le foire aux questions. D'après ce que je peux comprendre, c'est un serveur (plutôt qu'une bibliothèque en cours d'exécution). Je vois qu'il mentionne le stockage et je suis confus. À quoi servirait redis? J'ai entendu parler de sites web utilisant mysql et redis. Ce n'est pas une bibliothèque en cours d'exécution vraiment rapide comme je le pensais à l'origine, alors à quoi est-il utilisé?

651voto

Carl Zulauf Points 12826

C'est un magasin de données clés-valeurs "NoSQL". Plus précisément, c'est un serveur de structure de données. Pas comme MongoDB (qui est un magasin de documents basé sur un disque), bien que MongoDB puisse être utilisé pour des cas d'utilisation similaires clés/valeurs. L'analogie la plus proche est probablement de penser à Redis comme à Memcached, mais avec une persistance intégrée (sauvegarde ou journalisation sur disque) et plus de types de données.

Ces deux ajouts peuvent sembler assez mineurs, mais c'est ce qui rend Redis incroyable. La persistance sur disque signifie que vous pouvez utiliser Redis comme une véritable base de données au lieu d'un simple cache volatil. Les données ne disparaîtront pas lorsque vous redémarrez, comme avec memcached.

Les types de données supplémentaires sont probablement encore plus importants. Les valeurs clés peuvent être des chaînes simples, comme vous le trouverez dans memcached, mais elles peuvent également être des types plus complexes comme des Hashages, des Listes (collection ordonnée, qui constitue une excellente file d'attente), des Ensembles (collection non ordonnée de valeurs non répétées) ou des Ensembles Triés (collection ordonnée/ classée de valeurs non répétées).

Ceci n'est que la pointe de l'iceberg de Redis, car il y a d'autres fonctionnalités puissantes comme la publication/abonnement intégré, les transactions (avec verrouillage optimiste) et les scripts Lua.

L'ensemble des données, comme dans memcached, est stocké en mémoire, ce qui le rend extrêmement rapide (comme memcached)... souvent même plus rapide que memcached. Redis avait une mémoire virtuelle, où les valeurs rarement utilisées étaient échangées contre des disques, de sorte que seuls les clés devaient s'adapter en mémoire, mais cela a été abandonné. À l'avenir, les cas d'utilisation de Redis sont ceux où il est possible (et souhaitable) que l'ensemble des données s'inscrive en mémoire.

Redis est un excellent choix si vous voulez un magasin de données hautement évolutif partagé par plusieurs processus, plusieurs applications ou plusieurs serveurs. Simplement comme mécanisme de communication inter-processus, il est difficile à battre. Le fait que vous puissiez communiquer de manière transversale, inter-plateforme, inter-serveur ou inter-application aussi facilement en fait un choix très judicieux pour de nombreux cas d'utilisation. Sa rapidité en fait également un excellent cache.

Mise à jour 10/9/2014 : À partir d'aujourd'hui, Redis 3.0 est sorti de la version bêta et est entré dans la phase de candidate à la publication. Cette version de Redis apporte le support de Redis Cluster, ce qui facilite grandement la mise à l'échelle de Redis.

TL;DR : Si vous pouvez associer un cas d'utilisation à Redis et découvrir que vous n'êtes pas exposé au risque de manquer de RAM en utilisant Redis, il y a de fortes chances que vous devriez probablement utiliser Redis.

187voto

Mantas Points 897

À quoi cela peut-il servir? Quelques exemples du http://highscalability.com/blog/2011/7/6/11-common-web-use-cases-solved-in-redis.html:

  1. Afficher les dernières annonces sur votre page d'accueil. Il s'agit d'un cache en mémoire vive et est très rapide. LPUSH est utilisé pour insérer un ID de contenu en tête de la liste stockée à une clé. LTRIM est utilisé pour limiter le nombre d'éléments dans la liste à 5000. Si l'utilisateur doit parcourir au-delà de ce cache, alors il est renvoyé à la base de données.
  2. Suppression et filtrage. Si un article mis en cache est supprimé, il peut être retiré du cache en utilisant LREM.
  3. Classements et problèmes connexes. Un classement est un ensemble trié par score. Les commandes ZADD implémentent cela directement et la commande ZREVRANGE peut être utilisée pour obtenir les 100 meilleurs utilisateurs par score et ZRANK peut être utilisé pour obtenir le rang d'un utilisateur. Très direct et facile.
  4. Tri par votes d'utilisateurs et par horodatage. Il s'agit d'un classement similaire à Reddit où le score est une formule qui évolue avec le temps. LPUSH + LTRIM sont utilisés pour ajouter un article à une liste. Une tâche en arrière-plan interroge la liste et recompute l'ordre de la liste et ZADD est utilisé pour peupler la liste dans le nouvel ordre. Cette liste peut être récupérée très rapidement même par un site très chargé. Cela devrait être plus simple, le besoin du code de polling n'est pas élégant.
  5. Mise en place de la péremption des éléments. Pour maintenir une liste triée par horodatage, utiliser le temps Unix comme clé. La tâche difficile de l'expiration des éléments est mise en œuvre en indexant current_time+time_to_live. Un autre worker en arrière-plan est utilisé pour effectuer des requêtes en utilisant ZRANGE ... avec SCORES et supprimer les entrées expirées.
  6. Compter des choses. Garder des statistiques de toutes sortes est courant. Par exemple, si vous voulez savoir quand bloquer une adresse IP. La commande INCRBY rend facile la conservation de compteurs de manière atomique ; GETSET pour effacer de manière atomique le compteur ; l'attribut d'expiration peut être utilisé pour déterminer quand une clé doit être supprimée.
  7. N éléments uniques dans une période de temps donnée. C'est le problème des visiteurs uniques et peut être résolu en utilisant SADD pour chaque visite de page. SADD n'ajoutera pas un membre à un ensemble s'il existe déjà.
  8. Analyse en temps réel de ce qui se passe, pour les statistiques, anti-spam, ou autre chose. En utilisant les primitives Redis, il est beaucoup plus simple de mettre en place un système de filtrage anti-spam ou un autre système de suivi en temps réel.
  9. Pub/Sub. Conserver une carte de ceux qui sont intéressés par les mises à jour des données est une tâche courante dans les systèmes. Redis dispose d'une fonctionnalité de pub/sub pour faciliter cela en utilisant des commandes comme SUBSCRIBE, UNSUBSCRIBE, et PUBLISH.
  10. File d'attente. Les files d'attente sont partout en programmation. En plus des commandes de type push et pop, Redis dispose de commandes de file d'attente bloquantes afin qu'un programme puisse attendre que du travail soit ajouté à la file d'attente par un autre programme. Vous pouvez également faire des choses intéressantes en implémentant une file d'attente tournante de flux RSS à mettre à jour.
  11. Mise en cache. Redis peut être utilisé de la même manière que memcache.

52voto

vinod Points 908

Redis est un magasin de données clés-valeurs.

http://try.redis.io/

23voto

AndrewJM Points 433

Une des raisons pour lesquelles j'ai commencé à utiliser redis est que socket.io peut utiliser redis pour synchroniser pub/sub sur plusieurs serveurs.

Cela est utile lorsque qu'un utilisateur est connecté au serveur A, mais que le serveur B envoie l'événement.

https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO#server

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X