92 votes

Redis et Memcache ou Redis juste ?

Je suis à l'utilisation de memcached pour certains la mise en cache dans mon Rails 3 application par le biais du simple Rails.cache interface et maintenant j'aimerais faire un peu de fond le traitement d'un travail avec et redis resque.

Je pense qu'ils sont suffisamment différents pour justifier l'utilisation à la fois. Sur heroku cependant, il ya des frais pour l'utilisation de deux memcached et redis. Est-il judicieux d'utiliser les deux ou dois-je migrer simplement à l'aide de redis?

J'aime l'utilisation de memcached pour la mise en cache, car le moins récemment utilisé touches automatiquement obtenir poussé hors de la mémoire cache et je n'ai pas besoin de cache de données de persister. Redis est surtout nouveau pour moi, mais je comprends que c'est persistante par défaut et que les touches n'ont pas de date d'expiration de la mémoire cache automatiquement.

EDIT: Juste voulu être plus claire à ma question. Je sais qu'il est possible d'utiliser seulement Redis au lieu de deux. Je suppose que je veux juste savoir si il ya des inconvénients à le faire? Considérant à la fois la mise en œuvre et de l'infrastructure, il y a toutes les raisons pourquoi je ne devrais pas l'utiliser Redis? (I. e., est memcached plus rapide pour la simple mise en cache?) Je n'ai pas trouvé quelque chose de définitif.

50voto

Tom Clarkson Points 12369

En supposant que la migration à partir de memcached pour le redis pour la mise en cache que vous faites déjà est assez facile, j'irais avec le redis seulement de garder les choses simples.

Dans le redis persistance est facultative, de sorte que vous pouvez l'utiliser comme memcached, si c'est ce que vous voulez. Vous pouvez même trouver que faire de votre cache persistant est utile pour éviter beaucoup d'erreurs de la mémoire cache après un redémarrage. L'expiration est également disponible - l'algorithme est un peu différent de memcached, mais pas assez de matière pour la plupart des fins de voir http://redis.io/commands/expire pour plus de détails.

46voto

Luca Guidi Points 350

Je suis l’auteur de redis-magasin, il n’y a pas besoin d’utiliser directement les commandes Redis, il suffit d’utiliser la `` option comme ceci :

``

L’avantage d’utiliser Redis est des teintures et avec mon bijou, est que vous avez déjà des magasins pour , ou `` .

21voto

Brian Armstrong Points 8259

J'ai vu un peu grand rails de sites qui utilisent à la fois memcached et redis. Memcached est utilisé pour emphemeral les choses qui sont agréables à garder au chaud dans la mémoire, mais peut être perdu/régénéré si nécessaire, et redis pour le stockage persistant. Les deux sont utilisés pour prendre en charge à la sortie de l'db pour lire/écrire les opérations importantes.

Plus de détails:

memcached: utilisé pour la page d'/fragment/réponse la mise en cache et c'est ok pour frapper la limite de la mémoire sur memcached, car il sera LRU (moins récemment utilisé) pour expirer les vieux trucs, et de garder fréquemment consulté les clés de chaud dans la mémoire. Il est important que quoi que ce soit dans memcached pourrait être recréé à partir de la DB en cas de besoin (ce n'est pas uniquement la copie). Mais vous pouvez garder le dumping des choses en elle, et memcached va comprendre qui sont les plus fréquemment utilisés et de garder ces chaud dans la mémoire. Vous n'avez pas à vous soucier de la suppression des choses de memcache.

redis: vous l'utiliser pour les données que vous ne voulez pas perdre, et est assez petit pour tenir dans la mémoire. Cela comprend généralement resque/sidekiq des emplois, des compteurs pour la limitation du débit, de fractionner les résultats des tests, ou quoi que ce soit que vous ne voulez pas perdre/recréer. Vous ne souhaitez pas dépasser la limite de mémoire ici, donc vous devez être un peu plus prudent sur ce que vous stocker et de nettoyage plus tard.

Redis commence à souffrir de problèmes de performances une fois qu'il dépasse la limite de mémoire (corrigez-moi si je me trompe). Il est possible de résoudre ce problème en configurant le redis à agir comme memcached et LRU expiration de choses donc il ne l'atteint jamais la limite de mémoire. Mais vous ne voulez pas faire cela avec tout ce que vous êtes en gardant à l'redis, comme resque emplois. Donc à la place des gens gardent souvent le défaut des Rails.cache configuré pour utiliser memcached (à l'aide de l' dalli gem). Et puis ils garder un $redis = ... variable globale pour faire redis opérations.

# in config/application.rb
config.cache_store = :dalli_store  # memcached

# in config/initializers/redis.rb
$redis = $redis = Redis.connect(url: ENV['REDIS_URL'])

Il y a peut être un moyen facile de faire cela tout en redis - peut-être par le fait d'avoir deux redis instances, l'une avec un LRU dur de la limite de mémoire, semblable à memcache, et un autre pour le stockage persistant? Je n'ai pas vu cela, mais je devine que ce serait faisable.

15voto

efalcao Points 3332

Je considérerais vérifier ma réponse sur ce sujet :

Rails et la mise en cache, est-ce facile de basculer entre memcache et redis ?

Essentiellement, grâce à mon expérience, je préconiserais de les conserver séparément : memcached pour la mise en cache et redis pour les structures de données et plus de stockage persistant

6voto

Yarin Points 18186

J'ai demandé à l'équipe de la Redis Labs (qui fournissent les Memcached Cloud et Redis Cloud add ons) sur le produit qu'ils recommanderaient pour les Rails de la mise en cache. Ils ont dit qu'en général ils recommanderaient Redis Nuage, Memcached Cloud est principalement offert pour l'héritage de fins, et il a souligné que leur Memcached service de Cloud est en fait construire au-dessus de Redis Cloud.

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