Definition
Redis (Remote Dictionary Server) est un store de donnees en memoire open source, utilise comme cache, base de donnees, message broker et file d'attente. Il offre des temps de reponse sub-milliseconde, ce qui en fait le choix n°1 pour le caching haute performance.
Cree par Salvatore Sanfilippo en 2009, Redis est aujourd'hui utilise par pratiquement toutes les entreprises tech (Twitter, GitHub, Airbnb, etc.).
Structures de donnees
Redis n'est pas un simple store cle-valeur. Il supporte des structures de donnees 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 reel)
// 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 memoire, mais offre deux modes de persistance :
- RDB (Redis Database) : snapshots periodiques sur disque
- AOF (Append Only File) : log de chaque operation
Pour une durabilite maximale, activez les deux.
Solutions hebergees
| Solution | Type | Prix |
|---|---|---|
| Upstash | Serverless | Pay-per-request |
| Redis Cloud | Managed | A partir de 5$/mois |
| AWS ElastiCache | Managed | A partir de ~15$/mois |
| Fly.io Redis | Managed | A partir de 5$/mois |