Maîtriser Redis de zéro : types de données, commandes essentielles, expiration, persistance, cas d'usage réels (cache, sessions, files d'attente) et intégration Node.js.
Un Redis exposé sans mot de passe sur internet est une catastrophe. Ce chapitre couvre la configuration minimale pour un déploiement sécurisé, le monitoring, et les bonnes pratiques mémoire.
services:
redis:
image: redis:7-alpine
container_name: redis
restart: unless-stopped
command: redis-server /etc/redis/redis.conf
volumes:
- ./redis.conf:/etc/redis/redis.conf:ro
- redis_data:/data
ports:
- "127.0.0.1:6379:6379" # uniquement localhost — pas exposé publiquement
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
volumes:
redis_data:127.0.0.1:6379 — Redis n'écoute que sur l'interface loopback. Les connexions externes sont impossibles. C'est la configuration minimale de sécurité.
# Mot de passe obligatoire
requirepass votre-mot-de-passe-long-et-aléatoire
# Désactiver les commandes dangereuses
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""
rename-command KEYS ""
# Mémoire maximale (adapter à votre serveur)
maxmemory 512mb
# Politique d'éviction quand la mémoire est pleine
maxmemory-policy allkeys-lru
# Persistance (RDB + AOF)
save 3600 1
save 300 10
appendonly yes
appendfsync everysec
# Logs
loglevel notice
logfile /data/redis.log| Politique | Comportement |
|---|---|
noeviction | Erreur si mémoire pleine (défaut) |
allkeys-lru | Supprime les clés les moins récemment utilisées |
allkeys-lfu | Supprime les clés les moins fréquemment utilisées |
volatile-lru | LRU uniquement sur les clés avec TTL |
volatile-ttl | Supprime en priorité les clés qui expirent bientôt |
Pour un cache : allkeys-lru. Pour des données mixtes (cache + persistant) : volatile-lru.
REDIS_URL=redis://:votre-mot-de-passe@127.0.0.1:6379Dans ioredis :
const redis = new Redis(process.env.REDIS_URL)# Stats globales en temps réel
redis-cli -a MOT_DE_PASSE info all
# Surveiller toutes les commandes en temps réel (dev seulement)
redis-cli -a MOT_DE_PASSE monitor
# Identifier les clés qui occupent le plus de mémoire
redis-cli -a MOT_DE_PASSE memory usage nom:de:la:clé
# Analyser la distribution des types et des tailles
redis-cli -a MOT_DE_PASSE --bigkeys
# Latence
redis-cli -a MOT_DE_PASSE --latency
redis-cli -a MOT_DE_PASSE --latency-historyredis-cli info stats | grep -E "total_commands_processed|rejected_connections|keyspace_hits|keyspace_misses"
redis-cli info memory | grep -E "used_memory_human|maxmemory_human|mem_fragmentation_ratio"
redis-cli info clients | grep connected_clients| Métrique | Seuil d'alerte |
|---|---|
used_memory / maxmemory | > 80% |
keyspace_hit_ratio | < 90% (cache peu efficace) |
mem_fragmentation_ratio | > 1.5 (fragmentation excessive) |
connected_clients | selon votre pool de connexions |
rejected_connections | > 0 (pool saturé) |
redis-cli info stats | grep keyspace
# keyspace_hits:15234
# keyspace_misses:892Hit ratio = hits / (hits + misses). En dessous de 90%, votre cache est mal configuré (TTL trop court, mauvaise stratégie de clés, eviction trop agressive).
# Déclencher un snapshot manuellement
redis-cli -a MOT_DE_PASSE BGSAVE
# Copier le fichier dump.rdb
docker cp redis:/data/dump.rdb ./backup/dump-$(date +%Y%m%d).rdbPour les sauvegardes automatiques, un cron qui copie dump.rdb vers S3 ou un stockage distant toutes les heures est suffisant dans la plupart des cas.
requirepass127.0.0.1:6379, pas 0.0.0.0:6379)FLUSHALL et CONFIG renommés ou désactivésmaxmemory défini avec politique d'éviction/dataRedis est maintenant configuré pour la production. Pour aller plus loin sur les cas d'usage comme le cache de sessions et les files d'attente dans un contexte Node.js complet, l'article Redis : cache, sessions et files d'attente couvre ces patterns avec des exemples applicatifs concrets.