diff --git a/HowtoRedis.md b/HowtoRedis.md index 33105daa..3e9ebd8e 100644 --- a/HowtoRedis.md +++ b/HowtoRedis.md @@ -134,15 +134,22 @@ vm.overcommit_memory=1 ### Politique sur la mémoire -Lorsqu'on définit une limite de mémoire disponible pour Redis (paramètre `maxmemory`, en octets, fixé à 100 Mo par défaut dans nos installations), il faut indiquer à Redis quoi faire lorsque celle-ci est épuisée (paramètre `maxmemory-policy`). Il y a plusieurs options, les plus courantes sont : +Il est possible de démarrer Redis sans limite de mémoire. Il va donc occuper autant de RAM que nécessaire. +Si les données stockées croissent suffisamment, ça peut conduire à une saturation de la RAM disponible et une intervention du noyau qui pourra tuer des processus (_Out Of Memory Kill_). -* `noeviction` (par défaut) : Redis ne supprime jamais de clé existante et provoque des erreurs d'écriture. -* `allkeys-lru` : Redis supprime les clés selon l'algorythme LRU (_least recently used_ ; moins récemment utilisé). -* `volatile-ttl` : Redis supprime les clés qui ont leur expiration la plus proche. +On peut aussi définir une quantité maximale de mémoire utilisable par Redis (paramètre `maxmemory`, en octets, fixé à 100 Mo par défaut dans nos installations). Il faut indiquer à Redis quoi faire lorsque celle-ci est épuisée (paramètre `maxmemory-policy`). Il y a plusieurs options, et le choix dépend du type de données que l'on stocke dans Redis et de la manière on les utilise. le mieux est de se référer à la [documentation officielle](https://redis.io/docs/reference/eviction/), mais voici les politiques d'éviction disponibles : -Lorsque Redis est utilisé exclusivement pour du cache, il est conseillé de choisir `allkeys-lru`. -Lorsque les données stockées dans Redis ne doivent surtout pas risquer de disparaître, il faut choisir `noeviction` et gérer les éventuelles erreurs d'écriture. +* `noeviction`: Ne sauvegarde pas les nouvelles valeurs lorsque la limite est atteinte. En cas de réplication, ça s'applique au primaire. +* `allkeys-lru`: Conserve les clés les plus récemment utilisées et supprime les moins récemment utilisées (LRU = « least recently used »). +* `allkeys-lfu`: Conserve les clés les plus fréquemment utilisées et supprime les moins fréquemment utilisées (LFU = « least frequently used »). +* `volatile-lru`: Supprime les clés ayant une expiration définie les moins récemment utilisées. +* `volatile-lfu`: Supprime les clés ayant une expiration définie les moins fréquemment utilisées. +* `allkeys-random`: Supprime au hasard des clés. +* `volatile-random`: Supprime au hasard des clés ayant une expiration définie. +* `volatile-ttl`: Supprime des clés ayant une expiration définie, par ordre du plus petit TTL restant (TTL = « Time To Live »). +Lorsque Redis est utilisé exclusivement pour du cache, il est conseillé de choisir `allkeys-lfu` (ou `allkeys-lru` si la version de Redis ne supporte pas encore `allkeys-lfu`). +Lorsque les données stockées dans Redis ne doivent surtout pas risquer de disparaître, il faut choisir `noeviction` et gérer applicativement les éventuelles erreurs d'écriture. ## Utilisation