Zum Inhalt springen
Deutsch

Memcached-Cache

MemcachedCache ist die Memcached-gestützte Cache- Implementierung. Verteilter Cache über Pods, geteilt über Prozesse hinweg.

import { MemcachedCache } from 'actor-ts';
const cache = new MemcachedCache({
servers: ['memcached-1:11211', 'memcached-2:11211'],
});

Zwei Hauptgründe:

  1. Bestehende Memcached-Infrastruktur — dein Team betreibt es bereits.
  2. Reiner Cache-Anwendungsfall — du brauchst Redis’ Extra- Features nicht (Persistenz, Pub/Sub, Scripting, Sorted Sets).

Memcached ist einfacher als Redis — weniger Features, geringerer operativer Footprint, geringerer Speicher-Overhead. Für pures Key-Value-Caching mit TTLs reicht das voll.

interface MemcachedCacheSettings {
servers: string[]; // 'host:port'
username?: string;
password?: string;
timeoutMs?: number;
retries?: number;
}

memjs (der zugrunde liegende Client) unterstützt SASL-Auth über username/password. Mehrere Server werden über Hashing verteilt.

Terminal-Fenster
npm install memjs
# oder: bun add memjs
Cache-MethodeMemcached-Implementierung
get/set/deleteDirekte Memcached-Befehle.
incrKombination aus Memcached INCR/ADD.
setIfAbsentMemcached ADD (atomar).
mget/msetParallele Single-Key-Operationen.

mget/mset sind auf Memcached nicht Single-Round-Trip (keine Multi-Key-Befehle). Das Framework parallelisiert die einzelnen Operationen.

AspektMemcachedRedis
Speicher-Overhead pro EintragNiedrigerHöher
Multi-Key-OperationenLangsamer (parallele Single-Key)Schneller (MGET, MSET)
PersistenzKeineRDB / AOF verfügbar
Pub/SubNeinJa
DatentypenNur StringsStrings, Listen, Sets, Hashes, Sorted Sets
Cluster-SupportClientseitiges HashingEingebautes Clustering
ReplikationKeine (oder über Sidecars)Eingebaute Replikation

Für puren Cache: beides funktioniert. Redis gewinnt bei fast allem anderen, was das Framework wollen könnte. Memcached gewinnt bei minimalem operativen Footprint, wenn Caching der einzige Bedarf ist.

// Memcached konfiguriert mit --memory-limit=2048 (MB)
// → LRU-Eviction, sobald voll

Memcacheds Eviction ist LRU, konfiguriert auf der Memcached- Serverebene (nicht vom Cache-Client). Keine clientseitige Eviction-Policy.

Für einen Cache fester Größe ist das okay — Memcached wirft alte Einträge raus, um Platz zu schaffen.

memjs hält seinen eigenen Connection-Pool; das Framework verwaltet ihn nicht direkt. Tune über memjs-Optionen, falls nötig (meist sind die Defaults okay).