Précisions pour la gestion mémoire de Redis

This commit is contained in:
Jérémy Lecour 2024-03-05 09:22:05 +01:00 committed by Jérémy Lecour
parent 97a30643ae
commit 5f43e8b385
Signed by: jlecour
SSH key fingerprint: SHA256:h+5LgHRKwN9lS0SsdVR5yZPeFlJE4Mt+8UtL4CcP8dY

View file

@ -134,15 +134,22 @@ vm.overcommit_memory=1
### Politique sur la mémoire ### 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. 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 :
* `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.
Lorsque Redis est utilisé exclusivement pour du cache, il est conseillé de choisir `allkeys-lru`. * `noeviction`: Ne sauvegarde pas les nouvelles valeurs lorsque la limite est atteinte. En cas de réplication, ça s'applique au primaire.
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. * `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 ## Utilisation