Redis : expiration et mémoire
Expiration des clés
Section intitulée « Expiration des clés »SET session:abc "données" EX 3600 # expire dans 3600 sEXPIRE cle 60 # définir ou modifierPEXPIRE cle 1500 # en millisecondesEXPIREAT cle 1893456000 # à un instant UnixTTL cle # secondes restantes (-1 : sans expiration, -2 : inexistante)PTTL clePERSIST cle # supprime l'expirationUne commande qui réécrit une clé (SET sans option) supprime son expiration : repasser EX à chaque écriture si nécessaire.
Limiter la mémoire
Section intitulée « Limiter la mémoire »Sans limite, Redis consomme la mémoire disponible jusqu’à ce que le système tue le processus. Définir maxmemory :
redis-cli CONFIG SET maxmemory 256mbredis-cli CONFIG SET maxmemory-policy allkeys-lruredis-cli CONFIG REWRITE # écrit les valeurs dans redis.confOu dans /etc/redis/redis.conf :
maxmemory 256mbmaxmemory-policy allkeys-lruPolitiques d’éviction
Section intitulée « Politiques d’éviction »| Politique | Comportement quand la limite est atteinte |
|---|---|
noeviction |
Refuse les écritures (erreur OOM) : défaut |
allkeys-lru |
Supprime les clés les moins récemment utilisées : cache général |
allkeys-lfu |
Supprime les moins fréquemment utilisées |
volatile-lru |
Idem, parmi les clés qui ont une expiration |
volatile-ttl |
Supprime d’abord celles qui expirent bientôt |
allkeys-random |
Suppression aléatoire |
Redis utilisé comme cache : allkeys-lru ou allkeys-lfu. Redis utilisé comme base de données (files, sessions à conserver) : noeviction, et surveiller la mémoire.
Diagnostiquer la mémoire
Section intitulée « Diagnostiquer la mémoire »redis-cli INFO memory | grep -E "used_memory_human|maxmemory_human|mem_fragmentation_ratio"redis-cli MEMORY USAGE cle # octets d'une cléredis-cli MEMORY STATSredis-cli --bigkeysredis-cli INFO stats | grep -E "evicted_keys|expired_keys"| Champ | Lecture |
|---|---|
used_memory_human |
Mémoire utilisée par les données |
mem_fragmentation_ratio |
Fortement supérieur à 1,5 : fragmentation ; inférieur à 1 : échange sur disque (swap) |
evicted_keys |
Clés supprimées faute de place : s’il augmente, la limite est trop basse |
Mémoire système
Section intitulée « Mémoire système »Avertissement fréquent dans le journal : overcommit_memory is set to 0. Recommandé sur un serveur dédié à Redis :
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/99-redis.confsudo sysctl --systemL’option évite les échecs de sauvegarde en arrière-plan sur une machine presque pleine.
Bonnes pratiques de cache
Section intitulée « Bonnes pratiques de cache »- Toujours donner une expiration aux clés de cache.
- Préfixer les clés (
cache:…) pour pouvoir les cibler. - Ne pas stocker de valeurs très volumineuses.
- Prévoir que toute clé peut disparaître : l’application doit savoir reconstruire la valeur.
Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
OOM command not allowed when used memory > 'maxmemory' |
Politique noeviction et limite atteinte : augmenter maxmemory, choisir une politique d’éviction ou purger |
| Clés qui disparaissent | Expiration ou éviction : TTL, evicted_keys |
| Mémoire qui ne baisse pas après suppression | Fragmentation : redémarrage planifié, MEMORY PURGE |
| Processus tué par le système | maxmemory non défini : journalctl -k | grep -i "out of memory" |
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »Ces réglages sont identiques avec Redis 7.0 et 8.0.