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
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