Mise en cache en JavaScript : Redis, Memcached et solutions intégrées de A à Z

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 : Redis, Memcached et solutions intégrées : de A à Z

\n\n

La mise en cache est l'un des outils clés pour améliorer les performances des applications web. Dans le contexte de JavaScript et Node.js, une mise en cache judicieuse permet de réduire la charge sur les bases de données, de diminuer le temps de réponse des API et d'améliorer l'expérience utilisateur. Dans cet article, nous aborderons trois approches principales : la mise en cache intégrée en mémoire du processus, Memcached et Redis. Vous apprendrez quand choisir quel outil et obtiendrez des exemples de code prêts à l'emploi.

\n\n

Pourquoi la mise en cache dans Node.js ?

\n

Node.js est un environnement monothread avec des entrées-sorties asynchrones. Chaque requête vers une base de données ou une API externe prend du temps. La mise en cache permet de stocker les données fréquemment demandées dans un stockage rapide (mémoire vive) et de les restituer sans répéter des opérations lourdes. Ceci est particulièrement important pour :

\n
    \n
  • Réduire les latences lors des requêtes répétées
  • \n
  • Diminuer la charge sur les bases de données (PostgreSQL, MongoDB, etc.)
  • \n
  • Économiser les ressources de calcul du serveur
  • \n
  • Augmenter le débit de l'application
  • \n
\n\n

Mise en cache intégrée dans Node.js (In-Memory Cache)

\n

La méthode la plus simple consiste à utiliser un objet Map ou Object dans la portée globale. Cela convient aux petits projets ou aux données qui vivent au sein d'un seul processus.

\n\n

Exemple : Cache simple avec Map

\n
const cache = new Map();\n\nfunction getCachedData(key) {\n  if (cache.has(key)) {\n    const entry = cache.get(key);\n    if (Date.now() < entry.expiry) {\n      return entry.data;\n    } else {\n      cache.delete(key); // supprime les données expirées\n    }\n  }\n  return null;\n}\n\nfunction setCachedData(key, data, ttlMs = 60000) {\n  cache.set(key, {\n    data,\n    expiry: Date.now() + ttlMs\n  });\n}\n\n// Utilisation :\nsetCachedData('user:123', { name: 'Alice' }, 30000);\nconst user = getCachedData('user:123');\nconsole.log(user); // { name: 'Alice' }
\n\n

Avantages : simplicité, latence réseau nulle, ne nécessite pas l'installation de services supplémentaires.
\nInconvénients : les données ne sont pas partagées entre plusieurs processus/serveurs, limitées par la mémoire d'un seul processus.

\n\n

Memcached : mise en cache distribuée

\n

Memcached est un système de mise en cache distribué en mémoire haute performance. Il est simple, rapide et bien adapté au stockage de petits volumes de données (par exemple, sessions ou fragments HTML). Pour Node.js, il existe un module populaire memcached.

\n\n

Installation et connexion

\n
npm install memcached
\n\n

Exemple de travail avec Memcached

\n
const Memcached = require('memcached');\nconst memcached = new Memcached('localhost:11211');\n\n// Écriture de données avec TTL (en secondes)\nmemcached.set('user:456', { name: 'Bob' }, 3600, (err) => {\n  if (err) console.error('Erreur d\'écriture :', err);\n});\n\n// Lecture de données\nmemcached.get('user:456', (err, data) => {\n  if (err) {\n    console.error('Erreur de lecture :', err);\n  } else if (data) {\n    console.log('Données du cache :', data);\n  } else {\n    console.log('Cache vide — données non trouvées');\n  }\n});\n\n// Fermeture de la connexion à la fin\nprocess.on('SIGINT', () => {\n  memcached.end();\n});
\n\n

Avantages : simplicité de l'API, haute vitesse, distribution entre serveurs.
\nInconvénients : pas de réplication intégrée, perte de données au redémarrage, ensemble limité de types de données.

\n\n

Redis : mise en cache puissante avec des fonctionnalités avancées

\n

Redis n'est pas seulement un cache, mais un véritable stockage de données en mémoire prenant en charge des structures complexes (chaînes, listes, ensembles, hachages). Il prend en charge la persistance, la réplication et les transactions. Pour Node.js, nous utilisons la bibliothèque redis.

\n\n

Installation

\n
npm install redis
\n\n

Exemple : mise en cache avec Red

Blogs

Book Recommendations