Si vous avez activé la fonctionnalité de mémoire virtuelle (EDIT :désormais obsolète ), puis Redis commence à stocker les données "pas si fréquemment utilisées" sur le disque lorsque la mémoire est épuisée.
Si la mémoire virtuelle dans Redis est désactivée (valeur par défaut) et que maxmemory
est défini (valeur par défaut), Redis n'utilisera pas plus de mémoire que maxmemory
permet. Si vous activez maxmemory
désactivé, Redis commencera à utiliser la mémoire virtuelle (c'est-à-dire l'échange) et les performances chuteront considérablement.
Les nouvelles versions de Redis ont différentes politiques lorsque maxmemory
est atteint :
volatile-lru
- supprimer une clé parmi celles avec un jeu d'expiration, en essayant de supprimer les clés non utilisées récemment.volatile-ttl
- supprimer une clé parmi celles dont l'ensemble expire, en essayant de supprimer les clés dont le temps de vie restant est court.volatile-random
- supprimer une clé aléatoire parmi celles avec un jeu d'expiration.allkeys-lru
- commevolatile-lru
, mais supprimera tous les types de clé, à la fois les clés normales ou les clés avec un jeu d'expiration.allkeys-random
-commevolatile-random
, mais supprimera tous les types de clés, à la fois les clés normales et les clés avec un jeu d'expiration.
Si vous choisissez une politique qui ne supprime que les clés avec un ensemble EXPIRE, alors lorsque Redis manque de mémoire, il semble que le programme abandonne simplement l'opération malloc(). Autrement dit, si vous essayez de stocker plus de données, l'opération d'écriture échoue tout simplement.
Quelques liens pour plus d'informations :
- http://antirez.com/post/redis-as-LRU-cache.html
- http://eli.thegreenplace.net/2009/10/30/handling-out-of-memory-conditions-in-c/