Caching in JavaScript: Redis, Memcached und integrierte Lösungen von A bis Z

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Caching in JavaScript: Redis, Memcached und integrierte Lösungen: von A bis Z

\n\n

Caching ist eines der wichtigsten Werkzeuge zur Leistungssteigerung von Webanwendungen. Im Kontext von JavaScript und Node.js ermöglicht ein durchdachtes Caching, die Datenbanklast zu reduzieren, die API-Antwortzeiten zu verkürzen und die Benutzererfahrung zu verbessern. In diesem Artikel betrachten wir drei grundlegende Ansätze: integriertes Caching im Arbeitsspeicher des Prozesses, Memcached und Redis. Sie erfahren, wann Sie welches Werkzeug wählen sollten, und erhalten fertige Codebeispiele.

\n\n

Warum ist Caching in Node.js notwendig?

\n

Node.js ist eine Single-Thread-Umgebung mit asynchronem I/O. Jede Anfrage an eine Datenbank oder eine externe API benötigt Zeit. Caching ermöglicht es, häufig angeforderte Daten in einem schnellen Speicher (RAM) zu halten und ohne erneute aufwändige Operationen auszuliefern. Dies ist besonders wichtig für:

\n
    \n
  • Reduzierung von Latenzzeiten bei wiederholten Anfragen
  • \n
  • Verringerung der Datenbanklast (PostgreSQL, MongoDB usw.)
  • \n
  • Einsparung von Server-Ressourcen
  • \n
  • Steigerung des Anwendungsdurchsatzes
  • \n
\n\n

Integriertes Caching in Node.js (In-Memory Cache)

\n

Der einfachste Weg ist die Verwendung eines Map- oder Object-Objekts im globalen Gültigkeitsbereich. Dies eignet sich für kleine Projekte oder Daten, die innerhalb eines einzelnen Prozesses leben.

\n\n

Beispiel: Einfacher Cache mit 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); // abgelaufene Daten löschen\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// Verwendung:\nsetCachedData('user:123', { name: 'Alice' }, 30000);\nconst user = getCachedData('user:123');\nconsole.log(user); // { name: 'Alice' }
\n\n

Vorteile: Einfachheit, keine Netzwerklatenz, keine zusätzlichen Dienste erforderlich.
\nNachteile: Daten werden nicht zwischen mehreren Prozessen/Servern geteilt, begrenzt durch den Arbeitsspeicher eines einzelnen Prozesses.

\n\n

Memcached: Verteiltes Caching

\n

Memcached ist ein leistungsstarkes verteiltes In-Memory-Caching-System. Es ist einfach, schnell und eignet sich gut für die Speicherung kleiner Datenmengen (z. B. Sitzungen oder HTML-Fragmente). Für Node.js gibt es das beliebte Modul memcached.

\n\n

Installation und Verbindung

\n
npm install memcached
\n\n

Beispiel für die Arbeit mit Memcached

\n
const Memcached = require('memcached');\nconst memcached = new Memcached('localhost:11211');\n\n// Daten mit TTL (in Sekunden) schreiben\nmemcached.set('user:456', { name: 'Bob' }, 3600, (err) => {\n  if (err) console.error('Schreibfehler:', err);\n});\n\n// Daten lesen\nmemcached.get('user:456', (err, data) => {\n  if (err) {\n    console.error('Lesefehler:', err);\n  } else if (data) {\n    console.log('Daten aus dem Cache:', data);\n  } else {\n    console.log('Cache leer – Daten nicht gefunden');\n  }\n});\n\n// Verbindung beim Beenden schließen\nprocess.on('SIGINT', () => {\n  memcached.end();\n});
\n\n

Vorteile: Einfache API, hohe Geschwindigkeit, Verteilung zwischen Servern.
\nNachteile: Keine integrierte Replikation, Datenverlust bei Neustart, eingeschränkte Datentypen.

\n\n

Redis: Leistungsstarkes Caching mit erweiterten Funktionen

\n

Redis ist nicht nur ein Cache, sondern ein vollwertiger In-Memory-Datenspeicher mit Unterstützung für komplexe Strukturen (Strings, Listen, Sets, Hashes). Es unterstützt Persistenz, Replikation und Transaktionen. Für Node.js verwenden wir die Bibliothek redis.

\n\n

Installation

\n
npm install redis
\n\n

Beispiel: Caching mit Red

Blogs

Buchempfehlungen