Mise en cache en JavaScript (Node.js) : Redis et autres
La mise en cache est l'un des outils clés pour améliorer les performances des applications web sur Node.js. Elle permet de réduire le temps de réponse du serveur, de diminuer la charge sur les bases de données et les API externes, et d'améliorer l'expérience utilisateur. Dans cet article, nous examinerons les bibliothèques et approches populaires de mise en cache : des solutions intégrées au puissant Redis.
Pourquoi la mise en cache dans Node.js ?
Sans mise en cache, chaque requête au serveur peut entraîner des calculs répétés, des requêtes à la base de données ou à des services externes. Cela augmente le temps de réponse et la consommation de ressources. Le cache stocke les données fréquemment demandées dans un stockage rapide (mémoire vive ou base de données in-memory), ce qui permet :
- Accélérer les réponses — la lecture en mémoire est 100 à 1000 fois plus rapide que depuis le disque.
- Réduire la charge — la base de données traite moins de requêtes.
- Économiser le budget — moins de ressources pour les services cloud.
1. Redis — le standard industriel
Redis est un magasin de données in-memory hautes performances, prenant en charge les structures de données (chaînes, hachages, listes, ensembles). Pour Node.js, on utilise le package redis ou ioredis.
Installation et connexion
npm install redisconst redis = require('redis');const client = redis.createClient({ url: 'redis://localhost:6379'});
client.on('error', (err) => console.error('Redis Client Error', err));client.connect();Opérations de base
// Écriture avec TTL (durée de vie)await client.setEx('user:123', 3600, JSON.stringify({name: 'Alice', role: 'admin'}));
// Lectureconst cached = await client.get('user:123');if (cached) { console.log('Depuis le cache :', JSON.parse(cached));} else { // requête à la base de données}Fonctionnalités avancées
- Invalidation par motif — suppression de toutes les clés avec le préfixe
user:*. - Pub/Sub — notifications de modifications du cache entre instances.
- Redis Cluster — mise à l'échelle horizontale.
2. node-cache — cache in-memory sans dépendances externes
Pour les petits projets ou prototypes, la bibliothèque node-cache convient. Elle fonctionne dans un seul processus Node.js et ne nécessite pas l'installation de Redis.
Installation
npm install node-cacheExemple d'utilisation
const NodeCache = require('node-cache');const myCache = new NodeCache({ stdTTL: 600, checkperiod: 120 });
// Enregistrer les donnéesmyCache.set('posts:recent', postsData, 3600);
// Lireconst cached = myCache.get('posts:recent');if (cached) { return cached;} else { const fresh = await fetchPostsFromDB(); myCache.set('posts:recent', fresh); return fresh;}Caractéristiques
- Configuration simple du TTL (time-to-live).
- Nettoyage automatique des entrées obsolètes.
- Ne convient pas aux systèmes distribués (les données vivent uniquement dans un seul processus).
3. memory-cache — une alternative légère
memory-cache est un autre cache in-memory simple pour Node.js. Il se distingue par une API minimaliste.
const cache = require('memory-cache');
// Écriturecache.put('api:weather', weatherData, 300000); // 5 minutes
// Lectureconst data = cache.get('api:weather');if (!data) { // nouvelle requête}4. Stratégies de mise en cache
Le choix de la stratégie dépend du type de données et des exigences d'actualité :
- Cache-Aside (Lazy Loading) — l'application vérifie d'abord le cache, en cas d'échec elle charge les données et les enregistre dans le cache. L'approche la plus populaire.
- Write-Through — les données sont éc
Aussi dans la bibliothèque
Génération Swagger/OpenAPI pour Java : bibliothèques et outils
Psr/Log PHP : guide complet avec exemples pratiques
Générateur de QR codes en Go (Golang) : bibliothèque go-qrcode
Apprentissage automatique en C++ : aperçu des bibliothèques et outils
Configuration d'applications en Rust : bibliothèques config et dotenv