Mise en cache en JavaScript (Node.js) : Redis et autres outils
La mise en cache est l'une des stratégies clés pour optimiser les performances des applications serveur sur Node.js. Elle permet de réduire la charge sur les bases de données, de diminuer le temps de réponse des API et de réduire les coûts d'infrastructure. Dans cet article, nous allons passer en revue les principaux outils de mise en cache pour Node.js : Redis, Node-Cache (bibliothèque intégrée) et Memcached, comparer leurs approches et montrer des exemples de code concrets.
Pourquoi la mise en cache dans Node.js ?
Sans cache, chaque requête vers une ressource populaire peut entraîner de multiples accès à la base de données ou à des API externes. Le cache conserve les données fréquemment demandées dans un stockage rapide (mémoire vive), ce qui permet :
- Réduire le temps de réponse (latence) de 100-500 ms à 1-5 ms.
- Diminuer le nombre de requêtes vers la base de données et les services externes.
- Augmenter le débit du serveur (RPS).
1. Redis — le roi de la mise en cache
Redis est un magasin de données clé-valeur en mémoire, souvent utilisé comme cache, courtier de messages et base de données. Dans Node.js, la bibliothèque redis (ou ioredis) est utilisée pour interagir avec Redis.
Installation et connexion
npm install redisconst redis = require('redis');const client = redis.createClient({ url: 'redis://localhost:6379'});
client.on('error', (err) => console.error('Redis Error:', err));await client.connect();
// Exemple de mise en cache de données avec TTLasync function getCachedData(key) { const cached = await client.get(key); if (cached) return JSON.parse(cached);
const freshData = { message: 'Hello from DB', time: Date.now() }; await client.setEx(key, 60, JSON.stringify(freshData)); // TTL 60 sec return freshData;}Caractéristiques de Redis pour Node.js
- Support TTL — suppression automatique des entrées obsolètes.
- Structures de données — chaînes, listes, ensembles, hachages, ensembles triés.
- Pub/Sub — permet de construire des systèmes de notifications en temps réel.
- Clustering — mise à l'échelle horizontale sans perte de performance.
2. Node-Cache — cache en mémoire léger sans dépendances externes
Node-Cache est une bibliothèque simple pour mettre en cache des données directement dans la mémoire du processus Node.js. Idéal pour les petits projets, les microservices ou lorsqu'on ne souhaite pas déployer Redis.
Installation et exemple
npm install node-cacheconst NodeCache = require('node-cache');const myCache = new NodeCache({ stdTTL: 100, checkperiod: 120 });
// Sauvegarde de donnéesmyCache.set('user:123', { name: 'Alice', role: 'admin' });
// Récupération de donnéesconst user = myCache.get('user:123');if (user === undefined) { // données non présentes dans le cache — il faut charger depuis la base de données console.log('Cache miss');} else { console.log('Cache hit:', user);}
// Suppression par clémyCache.del('user:123');
// Vidage complet du cachemyCache.flushAll();Avantages et inconvénients de Node-Cache
- Avantages : ne nécessite pas de serveur externe, API simple, nettoyage automatique via TTL.
- Inconvénients : le cache est stocké uniquement dans un seul processus — les données sont perdues lors du redémarrage du serveur ; ne peut pas être utilisé entre plusieurs instances Node.js.
3. Memcached — cache distribué avec un minimum de surcharge
Memcached est un autre magasin en mémoire populaire, optimisé pour la mise en cache. Dans Node.js, la bibliothèque memcached est la plus couramment utilisée.
Installation et exemple
npm install memcachedconst Memcached = require('memcached');const memcac Aussi dans la bibliothèque
ts-mockito TypeScript : guide complet avec exemples pratiques
Kotlin Multiplatform : guide complet avec exemples en Kotlin
Planificateur de tâches PHP : bibliothèque cron‑expression pour un planning flexible
Mise en cache en TypeScript : Redis et autres solutions pour Node.js
Cryptographie en Rust avec la bibliothèque RustCrypto