web-dev-qa-db-fra.com

Memcached est-il un dinosaure par rapport à Redis?

J'ai beaucoup travaillé avec memcached ces dernières semaines et je viens de découvrir Redis. Lorsque j'ai lu cette partie de leur fichier readme, j'ai soudain eu une sensation de chaleur dans mon estomac:

Redis peut être utilisé en tant que memcached sur steroids, car il est aussi rapide que memcached mais avec un certain nombre de fonctionnalités supplémentaires. Comme memcached, Redis prend également en charge la définition de délais d'expiration pour les clés afin que cette clé soit automatiquement supprimée au bout d'un certain laps de temps.

Cela semble incroyable. 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 est un mauvais choix du point de vue des performances par rapport à ce nouveau venu appelé Redis?

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

180
Industrial

Memcache est un excellent outil encore et TRÈS fiable.

au lieu de regarder ce problème du point de vue du plus rapide dans la plage <100 ms, examinez les performances par "classe" du logiciel.

  • Est-ce qu'il utilise uniquement du bélier local? -> le plus rapide
  • Est-ce qu'il utilise un ram distant? -> rapide
  • Est-ce qu'il utilise ram plus disque dur -> oh hurm.
  • Est-ce qu'il utilise seulement harddisk -> run!
73
Daniel

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

  • Vous ne devriez 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 TCP port sans aide du client. Memcached est également plus rapide avec de grandes valeurs de l’ordre de 100 000. Redis a récemment beaucoup amélioré sur les grandes valeurs (branche instable) mais memcached reste plus rapide dans ce cas d'utilisation. Le point ici est: ni l'un ni l'autre ne sera probablement votre goulet d'étranglement pour la requête à la seconde qu'ils peuvent livrer.
  • Vous devriez vous soucier de l'utilisation de la mémoire. Pour les simples paires clé-valeur, memcached utilise plus efficacement la mémoire. Si vous utilisez des hachages Redis, Redis utilise davantage la mémoire. Dépend du cas d'utilisation.
  • Vous devez 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 créer un cache, vos données sont toujours disponibles après une mise à niveau 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 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 (il faut parfois beaucoup d'E/S). Ces opérations sont souvent aussi rapides que GET et SET. Donc, si vous n'avez pas seulement besoin de GET/SET mais de choses plus complexes, Redis peut vous aider beaucoup (pensez à la mise en cache de la timeline).

Il est difficile de choisir le bon moment sans un cas d'utilisation, mais je pense que pour beaucoup de choses, Redis est logique, car même si vous ne voulez pas l'utiliser comme base de données, vous serez beaucoup plus capable de 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 pourrais être biaisé puisque je suis le développeur principal du projet Redis.

200
antirez

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

  • La comparaison des fonctionnalités alors Redis a beaucoup plus de fonctionnalités;
  • Comparer la facilité d'installation Redis est également beaucoup plus facile. Aucune dépendance requise
  • Comparer le développement actif Redis est également préférable;
  • Je crois que 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.
81
Alfred

Ce que ne fait pas Redis en mémoire, c’est l’expulsion la moins récente des valeurs du cache. Avec memcached, vous pouvez définir en toute sécurité 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 en approcher, en définissant un délai d'expiration pour tout; lorsqu'il aura besoin de libérer de la mémoire, il examinera trois clés aléatoires et supprimera celle qui est la plus proche d'expiration.

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

46
Peter Scott

Vous voudrez peut-être aussi regarder Membase.

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

Je ne l'ai pas utilisé, mais il semble ressembler à Redis en ce qu'il s'agit d'un magasin KV centré sur la mémoire et persistant. Les principales différences par rapport à ce que je peux voir sont les suivantes:

  • Redis dispose de beaucoup plus de capacités de manipulation de données (ensembles ordonnés, etc.)
  • Redis a un projet Redis Cluster en attente pour ajouter une évolutivité horizontale
  • Redis dispose d'un seul niveau de déchargement de données sur disque (VM) basé sur un algorithme hybride qui prend en compte à la fois le LRU et la taille de l'objet.

  • Membase utilise le protocole fil memcached - utile comme chemin de mise à niveau pour les applications existantes

  • Membase est configuré pour évoluer horizontalement en utilisant une approche de hashtable distribuée
  • Membase peut prendre en charge plusieurs niveaux de déchargement de données en utilisant une approche LRU (très rarement utilisé va sur disque, un peu rarement passe sur SSD, fréquemment reste dans la RAM)
  • Pas sûr de la capacité TTL dans 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.

12
HikeOnPast

Hazelcast supporte nativement le protocole memcached

https://web.archive.org/web/20140601010929/http://hazelcast.org/docs/latest/manual/html-single/hazelcast-documentation.html

et est donc une alternative moderne à memcached. Vous devriez essayer toutes les solutions pour voir ce qui vous convient le mieux.

0
Miko Matsumura