Caching-Strategien
Kurz: Ein Cache speichert Ergebnisse, damit man sie nicht jedes Mal neu berechnen oder laden muss. Das macht Anwendungen schneller und günstiger. Schwierig ist, veraltete Daten rechtzeitig loszuwerden.
Wo gecacht wird
- Browser: Dateien und Antworten lokal speichern (
Cache-Control-Header). - CDN: Kopien nahe beim Nutzer weltweit.
- Server/Anwendung: häufige Ergebnisse im Arbeitsspeicher (z. B. Redis,
memoization: Memoization). - Datenbank: Zwischenspeicher für Seiten und Abfragen.
- CPU: Zwischenspeicher im Prozessor (Caches).
Muster
- Cache-Aside: Anwendung schaut erst in den Cache, bei Fehlschlag in die Datenbank und legt das Ergebnis ab. Am häufigsten.
- Write-Through: Schreiben geht in Cache und Datenbank gleichzeitig. Konsistent, etwas langsamer.
- Write-Back: zuerst nur in den Cache, später gesammelt in die Datenbank. Schnell, aber bei Absturz droht Verlust.
Das schwere Problem: Invalidierung
„Es gibt nur zwei schwere Dinge in der Informatik: Cache-Invalidierung und Dinge benennen.“ Wege:
- TTL (Time to live): Eintrag läuft nach X Sekunden ab. Einfach, aber zeitweise veraltet.
- Gezielt löschen, wenn sich Daten ändern (Cache-Tags, siehe Cache Tags und revalidateTag (Next.js)).
- Versionierte Namen für Dateien (
app.4f3a.js), die nie veralten.
Fallen
- Cache Stampede: Viele Anfragen holen gleichzeitig denselben abgelaufenen Wert. Abhilfe: Sperren oder etwas früher still erneuern.
- Zu große Caches verdrängen Wichtiges (Speicherverwaltung und OOM-Killer).
- Persönliche Daten gehören nicht in gemeinsam genutzte Caches.
Siehe auch: Skalierung