Caching in TypeScript: 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 TypeScript: Redis, Memcached und integrierte Lösungen: von A bis Z

\n\n

Caching ist eines der wichtigsten Werkzeuge zur Steigerung der Leistung von Webanwendungen und Diensten. Im Ökosystem von TypeScript und Node.js können Entwickler zwischen leistungsstarken externen Systemen (Redis, Memcached) und leichtgewichtigen integrierten Lösungen wählen. In diesem Artikel analysieren wir alle drei Ansätze, geben praktische Codebeispiele in TypeScript und helfen Ihnen, die optimale Strategie für Ihr Projekt auszuwählen.

\n\n

Warum ist Caching in TypeScript notwendig?

\n

Caching ermöglicht es, die Antwortzeit des Servers zu verkürzen, die Last auf Datenbanken und externe APIs zu reduzieren sowie Verzögerungen bei wiederholten Anfragen zu verringern. In TypeScript, das auf Node.js basiert, ist der Cache besonders nützlich für:

\n
    \n
  • das Speichern von Ergebnissen teurer Berechnungen;
  • \n
  • das Caching von Antworten externer APIs;
  • \n
  • das Speichern von Benutzersitzungen;
  • \n
  • die Reduzierung der Anzahl von Datenbankabfragen.
  • \n
\n\n

1. Integrierte Lösungen für Caching in TypeScript

\n

Für kleine Projekte oder Prototypen können Sie die integrierten Mittel von Node.js ohne Installation zusätzlicher Pakete nutzen.

\n\n

1.1. Verwendung von Map

\n

Der einfachste Weg ist ein Map-Objekt oder ein einfaches Objekt. Ein solcher Cache lebt jedoch nur im Speicher eines einzelnen Prozesses und geht bei einem Neustart verloren.

\n
// Einfacher Cache basierend auf Map\nclass SimpleCache<T> {\n    private cache = new Map<string, T>();\n\n    get(key: string): T | undefined {\n        return this.cache.get(key);\n    }\n\n    set(key: string, value: T): void {\n        this.cache.set(key, value);\n    }\n\n    clear(): void {\n        this.cache.clear();\n    }\n}\n\n// Beispiel zur Verwendung\nconst cache = new SimpleCache<string>();\ncache.set('user:1', 'Alice');\nconsole.log(cache.get('user:1')); // Alice
\n\n

1.2. Cache mit TTL (Time-To-Live)

\n

Eine erweiterte Version ist ein Cache mit automatischer Löschung von Einträgen nach einer bestimmten Zeit.

\n
// Cache mit TTL\nclass TtlCache<T> {\n    private cache = new Map<string, { value: T; expiry: number }>();\n\n    get(key: string): T | undefined {\n        const item = this.cache.get(key);\n        if (!item) return undefined;\n        if (Date.now() > item.expiry) {\n            this.cache.delete(key);\n            return undefined;\n        }\n        return item.value;\n    }\n\n    set(key: string, value: T, ttlMs: number): void {\n        this.cache.set(key, {\n            value,\n            expiry: Date.now() + ttlMs,\n        });\n    }\n}\n\n// Beispiel\nconst ttlCache = new TtlCache<number>();\nttlCache.set('price', 100, 5000); // lebt 5 Sekunden\nsetTimeout(() => console.log(ttlCache.get('price')), 6000); // undefined
\n\n

2. Caching mit Redis in TypeScript

\n

Redis ist ein beliebter In-Memory-Datenspeicher, der erweiterte Datenstrukturen, Pub/Sub und Persistenz unterstützt. Für TypeScript wird das Paket ioredis verwendet.

\n\n

2.1. Installation und Verbindung

\n
npm install ioredis\nnpm install @types/ioredis --save-dev
\n
import Redis from 'ioredis';\n\nconst redis = new Redis({\n    host: 'localhost',\n    port: 6379,\n});\n\nredis.on('connect', () => console.log('Connected to Redis'));\nredis.on('error', (err) => console.error('Redis error', err));
\n\n

2.2. Grundlegende Operationen set/get

\n
// Wert speichern\nawait redis.set('user:1:name', 'Alice');\n\n// Wert abrufen\nconst name = await redis.get('user:1:name');\nconsole.log(name); // Alice\n\n// TTL setzen (in Sekunden)\nawait redis.setex('session:123', 3600, 'active');
\n\n

2.3. Arbeiten mit Objekten (JSON)

\n
// Objekt speichern\nconst user = { id: 1, name: 'Alice', email: 'alice@example.com' };\nawait redis.set('user:1', JSON.stringify(user));\n\n// Lesen und parsen\nconst r                

Blogs

Buchempfehlungen