Zum Inhalt springen
Deutsch

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,
});

Drei Szenarien:

  1. Tests — schnell, kein I/O, sauberes Teardown.
  2. Single-Pod-Produktion — kein Bedarf, Cache-State zu teilen.
  3. 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.

interface InMemoryCacheSettings {
maxEntries?: number; // LRU-Cap; Default 10_000
cleanupMs?: number; // Sweep-Rhythmus für abgelaufene Einträge; Default 60_000
}
FeldZweck
maxEntriesObergrenze für die Cache-Größe. LRU-Eviction darüber hinaus.
cleanupMsWie oft abgelaufene Einträge gesweept werden. Ohne das verweilen abgelaufene Einträge bis zum Zugriff.

Für die meisten Apps reichen die Defaults.

maxEntries: 1000
→ 1001. eindeutiger Key eingefügt → der am längsten nicht genutzte Eintrag wird evicted

LRU 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.

await cache.set('key', value, 60_000); // läuft ab bei now + 60s

Zwei Cleanup-Pfade:

  1. Lazy — beim get geben abgelaufene Einträge None zurück (und werden entfernt).
  2. Periodisches Sweep — alle cleanupMs läuft der Cache über abgelaufene Einträge und entfernt sie. Reduziert Speicher für Keys, die geschrieben, aber nie gelesen werden.
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.