Si redis est déjà une partie de la pile, pourquoi est-Memcached encore utilisé aux côtés de Redis?
Redis pouvez faire tout ce que Memcached offre (LRU cache, le point d'expiration, et maintenant de clustering dans la version 3.x+, actuellement en version bêta) ou par des outils tels que twemproxy. La performance est similaire aussi. De plus, Redis ajoute la persistance en raison de laquelle vous ne devez pas faire du cache de réchauffement dans le cas d'un redémarrage du serveur.
Référence à certains vieux réponses qui permettent de comparer et Redis, Memcache, certaines faveur Redis que le remplacement de Memcache (si déjà présent dans la pile):
En dépit de cela, sur l'étude des piles de gros à l'échelle du web des entreprises comme Instagram, Pinterest, Twitter, etc, j'ai trouvé qu'ils utilisent les deux Memcached et Redis à des fins différentes, ne pas utiliser Redis pour la primaire de la mise en cache. Le principal cache est toujours Memcached, et Redis est utilisé pour ses structures de données de base logique de mise en cache.
À partir de 2014, pourquoi est-memcached encore la peine de la douleur d'être ajoutés en tant que composant dans votre pile, lorsque vous avez déjà un Redis composant qui peut faire tout ce que memcached peut? Quelles sont favorables points qui inclinent les architectes/ingénieurs de toujours inclure memcached en dehors de déjà existant Redis?
Mise à jour :
Pour nos plateformes, nous avons complètement jeté Memcached, et l'utilisation de redis pour la plaine ainsi que la logique des besoins de mise en cache. Très
performant, flexible et fiable.
Quelques exemples de scénarios:
- Liste de toutes les clés mises en cache par un modèle spécifique, et de lire ou de supprimer leurs valeurs. Très facile dans le redis, pas faisable ( facilement ) dans memcached.
- Stockage d'une charge utile de plus de 1 mo, facile à faire dans le redis, exige de dalle taille de réglages dans memcached, qui a la performance des effets secondaires de sa propre.
- Facile instantanés de courant du contenu du cache
- Redis cluster est prêt pour la production aussi bien avec des pilotes de langage,d'où cluster de déploiement est trop facile.
Vous devez vous connecter pour publier un commentaire.
La raison principale que je vois aujourd'hui comme un cas d'utilisation de memcached sur Redis est le supérieur de l'efficacité de mémoire, vous devriez être en mesure d'obtenir avec plaine des fragments de HTML la mise en cache (ou des applications similaires). Si vous avez besoin pour stocker les différents champs de vos objets de différentes memcached touches, puis Redis hachages sont va être plus efficace en terme de mémoire, mais lorsque vous avez un grand nombre de clés -> simple_string paires, memcached devrait être en mesure de vous donner plus d'articles par mégaoctet.
D'autres choses qui sont de bons points sur memcached:
Je crois que le Redis comme un cache en fait plus et plus de sens que les gens se déplacent vers la mise en cache intelligente ou quand ils essaient de préserver la structure de la mise en cache des données via le Redis structures de données.
Comparaison entre le Redis LRU et memcached LRU.
Les deux memcached et Redis n'effectuez pas de réel LRU, les expulsions, mais seulement une approximation de la.
Memcache expulsion est par classe de taille et dépend des détails de mise en œuvre de sa dalle de l'allocateur. Par exemple si vous voulez ajouter un élément qui s'intègre dans une même classe de taille, memcached va essayer de supprimer expiré ne sont pas utilisées récemment les éléments de la classe, au lieu d'essayer une tentative mondiale de comprendre ce qu'est l'objet, quelle que soit sa taille, quel est le meilleur candidat.
Redis au lieu essaye de prendre un bon objet en tant que candidat de l'éviction lorsque le
maxmemory
limite est atteinte, en regardant tous les objets, indépendamment de la taille de la classe, mais est capable de fournir environ un bon objet, pas le meilleur objet avec la plus grande période d'inactivité.La façon Redis ce n'est par la dégustation de quelques objets, la cueillette de l'un qui était à l'arrêt (pas d'accès) pour plus de temps. Depuis Redis 3.0 (actuellement en bêta), l'algorithme a été amélioré et prend également de bons candidats piscines à travers les expulsions, de sorte que le rapprochement a été améliorée. Dans le Redis documentation, vous pouvez trouver une description et des graphiques avec des détails sur la façon dont il fonctionne.
Pourquoi memcached a une meilleure mémoire que le Redis pour la simple chaîne -> string cartes.
Redis est de plus en plus complexe morceau de logiciel, de sorte que les valeurs dans le Redis sont stockées dans une sorte de plus en plus semblables aux objets dans un langage de programmation de haut niveau: ils ont associé le type d'encodage, de comptage de référence pour la gestion de la mémoire. Cela rend le Redis structure interne de bon et de raisonnable, mais a une surcharge par rapport à memcached qui traite uniquement avec des chaînes.
Quand Redis commence à être plus efficace en terme de mémoire
Redis est capable de stocker de petits agrégats de types de données dans une mémoire spéciale et de façon économique. Par exemple, un petit Redis Hachage représentant un objet, il est stocké en interne pas avec une table de hachage, mais comme un binaire unique goutte. Donc, la définition de plusieurs champs par objet dans un hash est plus efficace que le stockage de N séparés clés dans memcached.
Vous pouvez, en fait, de stocker un objet dans memcached comme un seul JSON (ou binaire codé) blob, mais contrairement à Redis, ce ne sera pas vous permettre d'extraire ou de mise à jour des champs indépendants.
L'avantage de Redis dans le contexte de la mise en cache intelligente.
En raison de Redis structures de données, le schéma habituel utilisé avec memcached de détruire des objets lorsque le cache est invalidé, pour la recréer à partir de la DB plus tard, est un moyen primitif de l'utilisation de Redis.
Par exemple, imaginez que vous avez besoin pour mettre en cache le dernier N de nouvelles posté dans Hacker News afin de remplir la "nouvelle" section du site. Ce que vous faites avec Redis est de prendre une liste (plafonné à M éléments) avec le plus récent des nouvelles inséré. Si vous utilisez un autre magasin pour vos données, et Redis comme un cache, ce que vous avez à faire est de remplir les deux les points de vue (et Redis la DB) lorsqu'un nouvel article est posté. Il n'y a pas d'invalidation du cache.
Toutefois, l'application peut toujours avoir de la logique de sorte que si le Redis liste est vide, par exemple après un démarrage, l'affichage initial peut être re-créé à partir de la DB.
En utilisant la mise en cache intelligente, il est possible d'effectuer la mise en cache avec Redis d'une façon plus efficace par rapport à memcache, mais tous les problèmes sont adaptés pour ce modèle. Par exemple des fragments de HTML la mise en cache ne peut pas bénéficier de cette technique.
Habitudes sont difficiles à briser 🙂
Sérieusement, il y a deux raisons principales qui - à ma connaissance - pourquoi Memcached est encore utilisé:
Cependant: