137 votes

Ce ne Redis quand il est à court de mémoire?

Ce pourrait être une question facile, mais je vais avoir du mal à trouver la réponse. Comment ne Redis 2.0 gérer l'exécution de maximum alloué de la mémoire? Comment fait-il pour décider des données à supprimer ou les données à conserver en mémoire?

Merci

113voto

BMiner Points 4471

Si vous avez de la mémoire virtuelle fonctionnalité activée (nouveau dans la version 2.0 ou 2.2, je pense), alors Redis commence à stocker les "pas-si-souvent utilisé pour les données sur le disque lorsque la mémoire est épuisée.

Si la mémoire virtuelle dans le Redis est désactivé, il apparaît que si le système d'exploitation de la mémoire virtuelle commence à s'habituer (c'est à dire swap), et les performances chutent énormément.

Maintenant, vous pouvez également configurer le Redis avec un maxmemory paramètre, ce qui empêche Redis d'utiliser plus de mémoire (par défaut).

Des versions plus récentes de Redis avoir diverses politiques quand maxmemory est atteint:

  • volatile-lru enlever une clé parmi les avec une expiration ensemble, en essayant de supprimer les clés n'a pas été utilisé.
  • volatile-ttl enlever une clé parmi les avec une expiration ensemble, en essayant de supprimer les clés avec de courts temps restant à vivre.
  • volatile random supprimer un clé aléatoire parmi ceux avec une expirer ensemble.
  • allkeys-lru comme volatile-lru, mais va supprimer tous les type de clé, à la fois normal de les touches ou les touches avec une expiration ensemble.
  • allkeys-aléatoire comme la volatilité aléatoire, mais supprimera tous les types de touches, les deux touches normales et les touches avec une expiration ensemble.

Si vous chercher une politique qui supprime uniquement les touches avec un EXPIRE le jeu, puis quand Redis à court de mémoire, il semble que le programme d'abandon de la fonction malloc (). C'est, si vous essayez de stocker plus de données, l'opération vient échoue lamentablement.

Quelques liens pour plus d'info (puisque vous ne devriez pas prendre mon mot pour lui):

4voto

bporter Points 874

Récemment, j'ai commencé à lire sur le Redis, donc je ne suis pas positif. Mais, je l'ai fait venir à travers quelques anecdotes qui peuvent être utiles.

Voici un extrait de http://antirez.com/post/redis-as-LRU-cache.html:

Une autre façon d'utiliser Redis comme un cache est le maxmemory directive, une fonctionnalité qui permet de spécifier un maximum quantité de mémoire à utiliser. Lorsque de nouvelles données est ajouté au serveur, et de la mémoire la limite est déjà atteinte, le serveur permet de supprimer en partie les anciennes données de la suppression d'un volatile clé, c'est une clé avec un EXPIRATION (timeout), même si l' la clé est encore loin d'expirer automatiquement.

Aussi, Redis 2.0 a une VM mode où toutes les clés doivent être placés dans la mémoire, mais les valeurs des touches rarement utilisées peuvent être sur le disque:

1voto

Adrian Points 766

J'ai récemment vécu un no-free-mémoire situation et mon application au sol à l'arrêt (n'écrit pas possible, des lectures ont été possible), l'exécution de scripts PHP arrêté morts dans leurs voies à mi-chemin et a dû être kill -9'd manuellement (même après la mémoire disponible).

J'ai supposé que la perte de données (ou d'incohérence des données) s'était passé donc j'ai fait un flushdb et restauré à partir de sauvegardes. Leçon apprise? Les sauvegardes sont vos amis.

-3voto

Tobias P. Points 3605

Redis est pas un cache comme memcached, toutes les données que vous mettez dans le redis ne sera pas supprimé, la seule exception est dans l'aide à échéance.

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