Mise en cache dans Node.js : Redis et alternatives pour accélérer les applications

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 redis


const 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-cache


Exemple 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

Recommendations