Meilleures pratiques pour l'utilisation de Redis dans le stockage de sessions à fort volume.
Configurez le stockage de sessions Redis avec des TTL, des limites de mémoire, une politique d'éviction, une persistance et une conception de clés pour les applications très sollicitées.
Meilleures pratiques pour l'utilisation de Redis dans le stockage de sessions à fort volume.
Redis est un choix courant pour le stockage de sessions à fort volume car il est rapide, partagé entre les instances d'application et efficace pour expirer les clés temporaires. Il échoue également de manière bruyante lorsque vous le traitez comme une mémoire illimitée.
Le problème central est simple : chaque session a besoin d'une durée de vie, et l'instance Redis a besoin d'une limite de mémoire ferme. Sans les deux, les anciennes sessions s'accumulent jusqu'à ce que les écritures échouent, la latence augmente ou l'hôte commence à swapper.
Établir d'abord les limites de mémoire
Le risque fondamental lors de l'utilisation de Redis pour le stockage de sessions est le gonflement de la mémoire. Puisque les sessions sont temporaires, l'instance Redis devrait prioriser la stabilité et le nettoyage automatisé plutôt que la rétention complète des données.
Définir les limites maxmemory
Définissez une limite de mémoire stricte avant l'arrivée du trafic de production. Laissez de la place pour le système d'exploitation, les réplicas, la surcharge de fork de persistance si activée, et les pics de trafic. De nombreuses équipes commencent en dessous de la RAM totale et ajustent après avoir surveillé used_memory, used_memory_rss, la latence et les métriques d'éviction.
# Exemple pour un serveur avec 16 Go de RAM
maxmemory 12gb
Sélectionner la politique d'éviction
Une fois que Redis atteint maxmemory, maxmemory-policy contrôle ce qui se passe ensuite. Choisissez la politique en fonction du fait que l'instance stocke uniquement des sessions ou partage de l'espace avec d'autres clés.
| Politique | Cible | Cas d'utilisation pour les sessions |
|---|---|---|
volatile-lru |
Clés avec une expiration définie | Bon lorsque Redis stocke des sessions temporaires plus quelques clés non-session. |
allkeys-lru |
Toutes les clés | Bon lorsque l'instance Redis est dédiée au stockage de sessions. |
noeviction |
Aucune éviction automatique | Utilisez uniquement si votre application doit échouer les écritures plutôt que d'évincer des sessions. |
maxmemory-policy volatile-lru
L'éviction est un plan de secours, pas votre stratégie de nettoyage. Les sessions devraient expirer via des TTL définis par l'application pendant le fonctionnement normal.
Maîtriser l'expiration des clés
Chaque clé de session a besoin d'un TTL. Les TTL manquants sont l'une des causes les plus courantes de fuites de mémoire de session Redis.
Appliquer le TTL à la création
Définissez la valeur et le TTL en une seule commande. Redis moderne supporte SET key value EX seconds, qui est plus flexible que les anciens exemples SETEX.
SET user:session:abc12345 '{"user_id":123,"role":"admin"}' EX 3600
Si votre framework utilise des sessions glissantes, rafraîchissez le TTL uniquement après avoir validé la session :
EXPIRE user:session:abc12345 3600
Évitez de réécrire un gros blob de session à chaque requête. Rafraîchissez le TTL à la lecture, et mettez à jour la valeur uniquement lorsque le contenu de la session change.
Concevoir les clés de session pour les opérations
Utilisez des clés prévisibles et avec espace de noms :
session:<tenant_id>:<session_id>
Ne mettez pas d'adresses e-mail, de noms ou de jetons dans le nom de la clé. Les clés peuvent apparaître dans les logs, métriques, traces et tableaux de bord. Gardez les détails d'identité dans la valeur et protégez-les avec vos contrôles d'application normaux.
Pour les workflows de déconnexion de tous les appareils ou de compromission de compte, stockez une recherche secondaire :
user_sessions:<user_id> -> ensemble d'identifiants de session
Cela permet à votre application de supprimer toutes les sessions pour un utilisateur sans scanner tout l'espace de clés.
Choisir la persistance en fonction du risque de session
Pour de nombreuses applications, les sessions peuvent être recréées en se reconnectant, donc la persistance Redis peut être désactivée ou maintenue légère. Pour les paniers, la confiance des appareils ou les sessions de longue durée, la persistance peut valoir les E/S disque.
| Stratégie | Quand elle convient |
|---|---|
| Aucune persistance | Les sessions sont jetables et la connexion est peu coûteuse. |
| Instantanés RDB | Vous voulez des points de récupération occasionnels avec une surcharge d'écriture plus faible. |
AOF appendfsync everysec |
Vous voulez une meilleure durabilité et pouvez accepter plus d'E/S disque. |
Testez le comportement de redémarrage avant de vous y fier. Un magasin de sessions qui récupère lentement peut toujours provoquer une panne si tous les serveurs d'application se reconnectent en même temps.
Surveiller les bons signaux
Suivez au minimum ces éléments :
used_memoryetused_memory_rssevicted_keysexpired_keyskeyspace_hitsetkeyspace_misses- latence des commandes
- clients connectés
Si evicted_keys augmente pendant le trafic normal, vos TTL de session sont peut-être trop longs, votre limite de mémoire trop basse, ou l'instance partage de l'espace avec des charges de travail non liées.
À retenir
Un magasin de sessions Redis à fort volume nécessite des TTL atomiques, une limite maxmemory réelle, une politique d'éviction adaptée à votre mélange de données, et une surveillance qui détecte les évictions avant que les utilisateurs ne se plaignent. Commencez avec des durées de session courtes et explicites, gardez les valeurs de session petites, et utilisez un déploiement Redis dédié lorsque les sessions deviennent critiques pour votre application.