Caching in JavaScript (Node.js): Redis und andere Tools
Caching ist eine der wichtigsten Strategien zur Optimierung der Leistung von Serveranwendungen in Node.js. Es ermöglicht, die Datenbanklast zu reduzieren, die API-Antwortzeit zu verkürzen und die Infrastrukturkosten zu senken. In diesem Artikel behandeln wir die wichtigsten Caching-Tools für Node.js: Redis, Node-Cache (eingebaute Bibliothek) und Memcached, vergleichen ihre Ansätze und zeigen reale Codebeispiele.
Warum ist Caching in Node.js notwendig?
Ohne Cache kann jede Anfrage an eine beliebte Ressource zu mehrfachen Datenbank- oder externen API-Aufrufen führen. Der Cache speichert häufig angefragte Daten in einem schnellen Speicher (RAM), was Folgendes bietet:
- Reduzierung der Antwortzeit (Latenz) von 100-500 ms auf 1-5 ms.
- Verringerung der Anzahl von Anfragen an die Datenbank und externe Dienste.
- Erhöhung des Serverdurchsatzes (RPS).
1. Redis – der König des Cachings
Redis ist ein In-Memory-Datenspeicher vom Typ "Schlüssel-Wert", der häufig als Cache, Message Broker und Datenbank verwendet wird. In Node.js wird für die Arbeit mit Redis die Bibliothek redis (oder ioredis) verwendet.
Installation und Verbindung
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();
// Beispiel für das Caching von Daten mit 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 Sekunden return freshData;}Besonderheiten von Redis für Node.js
- TTL-Unterstützung – automatische Löschung veralteter Einträge.
- Datenstrukturen – Strings, Listen, Mengen, Hashes, sortierte Mengen.
- Pub/Sub – ermöglicht den Aufbau von Echtzeit-Benachrichtigungssystemen.
- Clustering – horizontale Skalierung ohne Leistungseinbußen.
2. Node-Cache – leichter In-Memory-Cache ohne externe Abhängigkeiten
Node-Cache ist eine einfache Bibliothek zum Caching von Daten direkt im Speicher des Node.js-Prozesses. Ideal für kleine Projekte, Microservices oder wenn man keinen Redis aufsetzen möchte.
Installation und Beispiel
npm install node-cacheconst NodeCache = require('node-cache');const myCache = new NodeCache({ stdTTL: 100, checkperiod: 120 });
// Daten speichernmyCache.set('user:123', { name: 'Alice', role: 'admin' });
// Daten abrufenconst user = myCache.get('user:123');if (user === undefined) { // Daten nicht im Cache – müssen aus der DB geladen werden console.log('Cache miss');} else { console.log('Cache hit:', user);}
// Löschen nach SchlüsselmyCache.del('user:123');
// Gesamten Cache leerenmyCache.flushAll();Vor- und Nachteile von Node-Cache
- Vorteile: kein externer Server erforderlich, einfache API, automatische Bereinigung per TTL.
- Nachteile: Cache wird nur in einem Prozess gespeichert – bei Serverneustart gehen Daten verloren; kann nicht zwischen mehreren Node.js-Instanzen verwendet werden.
3. Memcached – verteilter Cache mit minimalem Overhead
Memcached ist ein weiterer beliebter In-Memory-Speicher, der für das Caching optimiert ist. In Node.js wird meist die Bibliothek memcached verwendet.
Installation und Beispiel
npm install memcachedconst Memcached = require('memcached');const memcac Auch in der Bibliothek
CryptoKit für Swift: Vollständiges Tutorial mit Codebeispielen
Arbeiten mit XML in Kotlin: Bibliotheken, Parsing und Dokumenterstellung
Rate Limiting in C++: Bibliotheken und Implementierung zum Schutz von APIs
Arbeiten mit ZIP-Archiven in C# (.NET): vollständige Anleitung