Définition
Redis (Remote Dictionary Server) est un store de données en mémoire open source, utilise comme cache, base de données, message broker et file d'attente. Il offre des temps de réponse sub-milliseconde, ce qui en fait le choix n°1 pour le caching haute performance.
Créé par Salvatore Sanfilippo en 2009, Redis est aujourd'hui utilise par pratiquement toutes les entreprises tech (Twitter, GitHub, Airbnb, etc.).
Structures de données
Redis n'est pas un simple store cle-valeur. Il supporte des structures de données riches :
| Structure | Commandes | Cas d'usage |
|---|---|---|
| Strings | GET, SET, INCR | Cache, compteurs, sessions |
| Lists | LPUSH, RPOP, LRANGE | Files d'attente, historique |
| Sets | SADD, SMEMBERS, SINTER | Tags, relations, deduplication |
| Sorted Sets | ZADD, ZRANGE, ZRANK | Classements, leaderboards |
| Hashes | HSET, HGET, HGETALL | Objets (profils utilisateur) |
| Streams | XADD, XREAD, XGROUP | Event log, messaging |
Cas d'usage courants
Cache applicatif
// Verifier le cache avant la BDD
const cached = await redis.get('user:123');
if (cached) return JSON.parse(cached);
const user = await db.query('SELECT * FROM users WHERE id = 123');
await redis.set('user:123', JSON.stringify(user), 'EX', 3600); // 1h TTL
return user;
Sessions utilisateur
// Stocker une session
await redis.hset('session:abc', { userId: 123, role: 'admin', lastAccess: Date.now() });
await redis.expire('session:abc', 86400); // 24h
Rate limiting
const key = 'ratelimit:' + ip;
const count = await redis.incr(key);
if (count === 1) await redis.expire(key, 60); // 60s window
if (count > 100) throw new Error('Rate limit exceeded');
Pub/Sub (notifications temps réel)
// Publisher
await redis.publish('notifications', JSON.stringify({ userId: 123, message: 'Nouveau message' }));
// Subscriber
redis.subscribe('notifications', (message) => {
console.log('Notification:', JSON.parse(message));
});
Persistance
Redis est principalement en mémoire, mais offre deux modes de persistance :
- RDB (Redis Database) : snapshots periodiques sur disque
- AOF (Append Only File) : log de chaque opération
Pour une durabilité maximale, activez les deux.
Solutions hebergees
| Solution | Type | Prix |
|---|---|---|
| Upstash | Serverless | Pay-per-request |
| Redis Cloud | Managed | À partir de 5$/mois |
| AWS ElastiCache | Managed | À partir de ~15$/mois |
| Fly.io Redis | Managed | À partir de 5$/mois |