189 votes

memcached est-il un dinosaure par rapport à Redis ?

J'ai travaillé un peu avec memcached ces dernières semaines et je viens de découvrir Redis. Quand j'ai lu cette partie de leur readme, j'ai soudainement eu un sentiment de chaleur et de confort dans mon estomac :

Redis peut être utilisé comme un memcached sur des stéroïdes parce qu'il est aussi rapide que memcached mais avec un certain nombre de fonctionnalités supplémentaires. Comme memcached, Redis supporte également la mise en place de délais d'attente pour les clés de sorte que de sorte que cette clé sera automatiquement automatiquement supprimée après un certain temps passé.

Ça a l'air génial. J'avais aussi trouvé cette page avec des points de repère : http://www.ruturaj.net/redis-memcached-tokyo-tyrant-mysql-comparison

Alors, honnêtement - memcache est-il vraiment ce vieux dinosaure qui constitue un mauvais choix du point de vue des performances par rapport à ce nouveau venu appelé Redis ?

Je n'ai pas entendu parler de Redis auparavant, d'où l'approche de ma question !

0 votes

Une lecture complémentaire intéressante : nosql.mypopescu.com/post/519078332/memcached-on-top-of-redis

9 votes

Ce benchmark de ruturaj ne mérite pas vraiment que l'on s'y attarde

0 votes

@user373345 Je suis d'accord, le test de ruturaj n'utilise pas les benchmarks appropriés, donc très probablement les différents clients influencent le test.

208voto

antirez Points 9894

Cela dépend de ce dont vous avez besoin, mais en général, je pense que.. :

  • Vous ne devez pas trop vous soucier des performances. Redis est plus rapide par cœur avec de petites valeurs, mais memcached est capable d'utiliser plusieurs cœurs avec un seul exécutable et un seul port TCP sans l'aide du client. memcached est également plus rapide pour les grandes valeurs de l'ordre de 100k. Redis s'est récemment beaucoup amélioré pour les grandes valeurs (branche instable) mais memcached est toujours plus rapide dans ce cas d'utilisation. Le point ici est : ni l'un ni l'autre ne sera probablement votre goulot d'étranglement pour les requêtes par seconde qu'ils peuvent fournir.
  • Vous devez vous soucier de l'utilisation de la mémoire. Pour de simples paires clé-valeur, memcached est plus efficace en termes de mémoire. Si vous utilisez des hachages Redis, Redis est plus efficace en termes de mémoire. Cela dépend du cas d'utilisation.
  • Vous devriez vous préoccuper de la persistance et de la réplication, deux fonctionnalités uniquement disponibles dans Redis. Même si votre objectif est de construire un cache, il est utile que vos données soient toujours là après une mise à jour ou un redémarrage.
  • Vous devez vous soucier du type d'opérations dont vous avez besoin. Dans Redis il y a beaucoup d'opérations complexes, même en considérant seulement le cas d'utilisation de la mise en cache, vous pouvez souvent faire beaucoup plus en une seule opération, sans exiger que les données soient traitées côté client (beaucoup d'E/S sont parfois nécessaires). Ces opérations sont souvent aussi rapides que les simples GET et SET. Ainsi, si vous n'avez pas seulement besoin de GET/SET, mais de choses plus complexes, Redis peut vous être d'une grande aide (pensez à la mise en cache temporelle).

Sans un cas d'utilisation, il est difficile de choisir pour le moment, mais je pense que pour beaucoup de choses Redis a du sens, car même si vous ne voulez pas l'utiliser comme une base de données, étant beaucoup plus capable, vous pouvez résoudre plus de problèmes, pas seulement la mise en cache, mais même la messagerie, le classement, etc.

P.s. Bien sûr, je peux être partial puisque je suis le principal développeur du projet Redis.

70 votes

+1 pour la grande divulgation à la fin

6 votes

Je ne suis pas sûr qu'il s'agisse d'une erreur de langage, mais si vous commencez votre argumentation par "en général, je pense que vous ne devriez pas trop vous soucier des performances", il y a de quoi s'inquiéter. Redis peut être très bon pour certaines catégories de problèmes mais, traditionnellement, memcache a été utilisé spécifiquement pour résoudre les problèmes de performance avec les bases de données persistantes. Je pense également qu'une omission flagrante dans votre liste est la maturité du produit. Memcache est un produit mature avec environ une décennie d'expérience. Redis est prometteur, mais n'existe que depuis environ 3 ans.

1 votes

@DougW Vous sortez cette phrase de son contexte. Elle a beaucoup plus de sens si vous lisez la phrase qui clôt le paragraphe juste après : "Le point ici est : ni l'un ni l'autre ne sera probablement votre goulot d'étranglement pour le nombre de requêtes par seconde qu'ils peuvent fournir".

83voto

Alfred Points 32190

Donc, honnêtement - memcache est-il vraiment si vieux dinosaure qui est un mauvais choix du point de vue des performances quand comparé à ce nouveau venu appelé Redis ?

  • Comparaison de l'ensemble des caractéristiques puis Redis a beaucoup plus de fonctionnalités ;
  • Comparaison de la facilité d'installation Redis est également beaucoup plus facile. Aucune dépendance n'est requise ;
  • Comparaison du développement actif Redis est également meilleur ;
  • Je crois memcached est un peu plus rapide que Redis . Il ne touche pas du tout le disque ;
  • Mon opinion est que Redis est un meilleur produit que memcached .

31 votes

Redis ne touche le disque que si vous le lui demandez. Habituellement, il fait une fsync toutes les deux secondes environ -> vous ne le remarquerez pas.

1 votes

@Marc yup. Je crois aussi que vous pouvez lui dire de ne pas toucher au disque du tout, mais je crois qu'il fait toujours des fsynchros en ce moment ?

1 votes

@Marc, @Alfred Vous avez tous les deux raison. La configuration standard (de la version source actuelle) utilise la persistance sur disque et utilise fsync toutes les secondes. (voir github.com/antirez/redis/blob/master/redis.conf )

74voto

Daniel Points 2619

Memcache est un excellent outil encore et TRES fiable.

Au lieu d'examiner cette question du point de vue de la rapidité à l'intérieur de la plage des 100 ms, regardez les performances par "classe" de logiciel.

  • Utilise-t-il uniquement la RAM locale ? -> le plus rapide
  • Utilise-t-il la RAM à distance ? -> rapide
  • Est-ce qu'il utilise de la mémoire vive et un disque dur -> oh hurm.
  • N'utilise-t-il que le disque dur ?

3 votes

A ma connaissance, il n'y a pas de possibilité de gérer la réplication avec memcache. Memcache est purement destiné à être un cache. Si l'élément est purgé/perdu, alors il doit être reconstruit. Je ne l'ai jamais utilisé auparavant et je ne l'ai pas évalué, mais cela peut vous intéresser. code.google.com/p/memagent

1 votes

Membase supporte le protocole memcached mais aussi la persistance et la réplication.

1 votes

Récemment, j'ai vu de l'ethernet lié, à travers 4 ports. 4 x 44MB/s. Cela rend la RAM encore plus précieuse, en supposant que vous puissiez mettre en place un réseau Ethernet intégré !

47voto

Peter Scott Points 451

Ce que memcached fait et que Redis ne fait pas, c'est l'éviction des valeurs les moins récemment utilisées du cache. Avec memcached, vous pouvez définir autant de valeurs que vous le souhaitez, et lorsqu'elles débordent de la mémoire, celles que vous n'avez pas utilisées récemment sont supprimées. Avec Redis, vous ne pouvez que vous rapprocher de ce principe, en fixant un délai d'expiration pour chaque valeur ; lorsqu'il doit libérer de la mémoire, il examinera trois clés aléatoires et supprimera celle qui est la plus proche d'expirer.

C'est la principale différence, si vous ne l'utilisez que comme cache.

27 votes

13voto

HikeOnPast Points 346

Vous pouvez également vous intéresser à Membase.

http://www.northscale.com/products/membase_server.html

Je ne l'ai pas utilisé, mais il semble être similaire à Redis dans la mesure où il s'agit d'un magasin KV centré sur la mémoire avec persistance. Les principales différences, d'après ce que je peux voir, sont les suivantes :

  • Redis a beaucoup plus de possibilités de manipulation des données (ensembles ordonnés, etc.).

  • Redis a un projet Redis Cluster en attente pour ajouter de l'extensibilité horizontale.

  • Redis possède un seul niveau de déchargement des données sur le disque (VM) basé sur un algorithme hybride qui prend en compte à la fois LRU et la taille de l'objet.

  • Membase utilise le protocole filaire memcached - utile comme voie de mise à niveau pour les applications existantes.

  • Membase est configuré pour évoluer horizontalement en utilisant une approche distribuée de type hashtable.

  • Membase peut prendre en charge plusieurs niveaux de déchargement des données à l'aide d'une approche LRU (les données très rarement utilisées vont sur le disque, les données plus rarement utilisées vont sur le SSD, les données fréquentes restent dans la RAM).

  • Je ne suis pas sûr de la capacité TTL de Membase.

Le choix peut dépendre de la mesure dans laquelle votre application peut tirer parti de la fonctionnalité supplémentaire de manipulation de données de Redis.

0 votes

Salut Dean, merci pour votre message. Je vais certainement le consulter. Puis-je utiliser Membase en PHP ?

4 votes

Comme Membase utilise le protocole memcached, n'importe quel client memcached devrait fonctionner : wiki.membase.org/bin/view/Main/Clients

0 votes

Membase supporte le TTL. Toutes les implémentations de Memcache supportent les puts avec un temps d'expiration. github.com/memcached/memcached/blob/master/doc/protocol.txt#L79

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