Questions d'entretien Redis
1. Qu'est-ce que Redis et quels sont ses cas d'usage principaux ?
Redis est un store de données en mémoire open source, utilise comme base de données, cache et broker de messages. Ses cas d'usage principaux : cache applicatif (le plus courant, pour accélérer les requêtes), sessions utilisateur, compteurs en temps réel (vues, likes), files d'attente (avec les listes ou Streams), pub/sub (messagerie temps réel), leaderboards (avec les sorted sets), et rate limiting. Redis est extrêmement rapide car toutes les opérations se font en mémoire.
2. Quelles sont les structures de données de Redis ?
Redis offre des structures de données riches : String (valeurs simples, compteurs avec INCR), List (liste doublement chaînée, LPUSH/RPOP pour les files), Set (ensemble unique, opérations ensemblistes SUNION/SINTER), Sorted Set (ensemble ordonne par score, idéal pour les classements), Hash (table de hachage, parfait pour les objets), Stream (log append-only pour l'event streaming), Bitmap (opérations bit a bit), HyperLogLog (estimation de cardinalite).
3. Expliquez les stratégies d'eviction de Redis.
Quand Redis atteint la limite de mémoire (maxmemory), il doit supprimer des clés. Stratégies : noeviction (retourne une erreur), allkeys-lru (supprime la cle la moins récemment utilisee parmi toutes), volatile-lru (LRU parmi les clés avec un TTL), allkeys-lfu (supprime la cle la moins fréquemment utilisee), volatile-ttl (supprime la cle avec le TTL le plus court). Pour un cache, allkeys-lru ou allkeys-lfu sont recommandés.
4. Comment fonctionne la persistance dans Redis ?
Deux mécanismes : RDB (Redis Database) cree des snapshots periodiques du dataset en mémoire vers un fichier binaire. Rapide au redémarrage mais risque de perte des données entre snapshots. AOF (Append Only File) enregistre chaque opération d'écriture dans un log. Plus durable mais fichier plus volumineux. On peut combiner les deux : AOF pour la durabilité et RDB pour les sauvegardes rapides. Depuis Redis 7, le mode AOF multi-part améliore les performances.
5. Qu'est-ce que Redis Cluster et comment fonctionne-t-il ?
Redis Cluster distribue automatiquement les données sur plusieurs nœuds Redis. Les données sont partitionnees en 16384 hash slots. Chaque nœud possède un sous-ensemble de slots. Le client calcule le slot d'une cle avec CRC16(key) % 16384 et contacte le bon nœud. Si le nœud est incorrect, il reçoit une redirection (MOVED). Chaque nœud master à des réplicas pour la haute disponibilité. Le failover est automatique.
6. Expliquez le pattern cache-aside (lazy loading).
Le pattern cache-aside : l'application vérifie d'abord si la donnée est dans le cache Redis. Si oui (cache hit), elle la retourne. Si non (cache miss), elle lit la base de données, stocke le résultat dans le cache avec un TTL, et retourne la donnée. Avantages : seules les données demandées sont mises en cache, pas de données inutiles. Inconvenient : le premier accès est toujours lent (cold start). Variante : write-through ecrit dans le cache à chaque écriture en base.
7. Comment implémenter un rate limiter avec Redis ?
Deux approches courantes. Fenetre fixe : utilisez INCR sur une cle avec le timestamp comme suffixe (rate:user:202605271400) et EXPIRE pour le TTL de la fenetre. Token bucket : utilisez un sorted set avec les timestamps des requêtes, ZADD pour ajouter et ZRANGEBYSCORE pour compter les requêtes dans la fenetre glissante. Redis est idéal pour le rate limiting grâce à sa rapidité et ses opérations atomiques.
8. Qu'est-ce que les Streams Redis et comment les utiliser ?
Les Redis Streams (depuis Redis 5) sont des structures de données de type log append-only, similaires à Apache Kafka. Chaque entrée à un ID unique (timestamp + séquence). Les consumer groups permettent à plusieurs consommateurs de lire les mêmes données de manière coordonnee. Commandes clés : XADD (ajouter), XREAD (lire), XREADGROUP (lire en groupe), XACK (acquitter). Cas d'usage : pipelines d'événements, messaging, ingestion de données temps réel.
9. Comment sécuriser Redis en production ?
Redis n'est pas conçu pour être expose sur Internet. Bonnes pratiques : configurer un mot de passe (requirepass), bind sur l'interface locale uniquement, utiliser un firewall pour limiter l'accès, activer TLS pour le chiffrement en transit, renommer les commandes dangereuses (FLUSHALL, CONFIG), utiliser les ACL (Access Control Lists depuis Redis 6) pour des permissions granulaires, et toujours tourner la dernière version stable.
10. Comment monitorer Redis en production ?
Commandes utiles : INFO (statistiques detaillees : mémoire, CPU, clients, réplication), MONITOR (affiche toutes les commandes en temps réel — attention en production), SLOWLOG (requêtes lentes), LATENCY (diagnostic de latence). Métriques clés à surveiller : utilisation mémoire (used_memory vs maxmemory), taux de hit/miss (keyspace_hits/misses), clients connectes, opérations par seconde (instantaneous_ops_per_sec). Exportez vers Prometheus avec redis_exporter.