In-Memory-Cache
InMemoryCache ist die Default-Cache-Implementierung.
In-Process, LRU-Eviction, TTL pro Eintrag — schnell und keine
Abhängigkeiten.
import { InMemoryCache } from 'actor-ts';
const cache = new InMemoryCache({ maxEntries: 10_000,});Wann einsetzen
Abschnitt betitelt „Wann einsetzen“Drei Szenarien:
- Tests — schnell, kein I/O, sauberes Teardown.
- Single-Pod-Produktion — kein Bedarf, Cache-State zu teilen.
- Dev / lokal — derselbe Code ohne Redis auf dem Laptop.
Für Multi-Pod-Produktion nimm stattdessen Redis oder Memcached — sonst hätten die Pods je eine eigene Kopie.
Konfiguration
Abschnitt betitelt „Konfiguration“interface InMemoryCacheSettings { maxEntries?: number; // LRU-Cap; Default 10_000 cleanupMs?: number; // Sweep-Rhythmus für abgelaufene Einträge; Default 60_000}| Feld | Zweck |
|---|---|
maxEntries | Obergrenze für die Cache-Größe. LRU-Eviction darüber hinaus. |
cleanupMs | Wie oft abgelaufene Einträge gesweept werden. Ohne das verweilen abgelaufene Einträge bis zum Zugriff. |
Für die meisten Apps reichen die Defaults.
LRU-Eviction
Abschnitt betitelt „LRU-Eviction“maxEntries: 1000
→ 1001. eindeutiger Key eingefügt → der am längsten nicht genutzte Eintrag wird evictedLRU heißt häufig genutzte Einträge bleiben; selten genutzte fliegen raus. Gut für leseintensive Caches, bei denen das Hot-Set in den Speicher passt, der Long-Tail aber nicht.
TTL-Behandlung
Abschnitt betitelt „TTL-Behandlung“await cache.set('key', value, 60_000); // läuft ab bei now + 60sZwei Cleanup-Pfade:
- Lazy — beim
getgeben abgelaufene Einträge None zurück (und werden entfernt). - Periodisches Sweep — alle
cleanupMsläuft der Cache über abgelaufene Einträge und entfernt sie. Reduziert Speicher für Keys, die geschrieben, aber nie gelesen werden.
Über das System teilen
Abschnitt betitelt „Über das System teilen“import { CacheExtensionId } from 'actor-ts';
system.extension(CacheExtensionId).configure({ defaultCache: new InMemoryCache({ maxEntries: 50_000 }),});
// Zugriff über:const cache = system.extension(CacheExtensionId).cache;Ein systemweiter Cache, den mehrere Konsumenten (HTTP- Middleware, Projection-Actors, eigener Code) teilen. Nützlich, wenn:
- Du eine konfigurierte Cache-Instanz willst, nicht eine pro Konsument.
- Cache-Statistiken sich systemweit ansammeln.
Für Per-Route-Caches instanziiere new InMemoryCache() direkt,
ohne über die Extension zu gehen.
Wann er für Produktion falsch ist
Abschnitt betitelt „Wann er für Produktion falsch ist“Wohin als Nächstes
Abschnitt betitelt „Wohin als Nächstes“- Cache-Übersicht — das große Bild.
- Redis-Cache — Multi-Pod- Alternative.
- Memcached-Cache — Alternative.
- CachedSnapshotStore — ein Konsument der Cache-Abstraktion.