EmDashs Pro-Anfrage-Cache dedupliziert bereits identische Lesevorgänge während eines Seitenrenderings. Der optionale Object-Cache speichert ausgewählte Abfrageergebnisse über Anfragen hinweg, sodass eine spätere Anfrage denselben Datenbanklesevorgang vermeiden kann. Er ist nützlich, wenn öffentlicher Traffic mehr Datenbanklesevorgänge erzeugt, als das gewählte Backend bewältigen sollte.
Die Datenbank bleibt die Quelle der Wahrheit. Cache-Lesevorgänge fallen bei Fehlern auf die Datenbank zurück, und Schreibvorgänge invalidieren den betroffenen Cache-Namespace. Der Object-Cache ist standardmäßig deaktiviert; aktivieren Sie ihn, indem Sie einen objectCache-Adapter zur emdash()-Integration hinzufügen.
Übersicht
| Backend | Am besten für | Zwischen Isolaten geteilt |
|---|---|---|
| KV | Cloudflare Workers | Ja |
| Memory | Node.js, lokale Entwicklung | Nein (pro Prozess) |
Auf Cloudflare werden Anfragen von vielen kurzlebigen Isolaten über Regionen hinweg bedient. KV wird von allen gemeinsam genutzt, sodass ein von einer Anfrage zwischengespeicherter Wert für die nächste Anfrage überall verfügbar ist. Das Memory-Backend speichert innerhalb eines einzelnen Prozesses, was für einen langlebigen Node.js-Server geeignet ist.
Cloudflare KV
Konfigurieren Sie den KV-Adapter und verweisen Sie ihn auf eine KV-Bindung:
import emdash from "emdash/astro";
import { d1, r2, kvCache } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
emdash({
database: d1({ binding: "DB" }),
storage: r2({ binding: "MEDIA" }),
objectCache: kvCache({ binding: "CACHE" }),
}),
],
});
Einrichtung
Erstellen Sie einen KV-Namespace und fügen Sie die Bindung zu Ihrer Wrangler-Konfiguration hinzu.
npx wrangler kv namespace create CACHE
Der Befehl gibt eine Namespace-id aus. Fügen Sie sie unter dem in kvCache verwendeten Bindungsnamen hinzu:
wrangler.jsonc
{
"kv_namespaces": [
{
"binding": "CACHE",
"id": "<namespace-id>"
}
]
} wrangler.toml
[[kv_namespaces]]
binding = "CACHE"
id = "<namespace-id>" Optionen
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
binding | string | — | KV-Bindungsname aus Ihrer Wrangler-Konfiguration. Erforderlich. |
defaultTtl | number | 3600 | Lebensdauer zwischengespeicherter Einträge in Sekunden. KV erzwingt ein Minimum von 60 Sekunden. |
revalidate | number | 1000 | Isolat-lokales Epoch-Wiederverwendungsfenster in Millisekunden. Siehe Aktualität. |
timeout | number | 2000 | Maximale Wartezeit in Millisekunden auf einen KV-Vorgang, bevor er als Cache-Miss behandelt wird. Schützt vor einem blockierten KV-Lesevorgang, der die Anfrage hängen lässt. Auf 0 setzen zum Deaktivieren. |
keyPrefix | string | "em" | Präfix für jeden Cache-Schlüssel. Setzen Sie einen eindeutigen Wert, wenn mehrere Sites einen Namespace teilen. |
Node.js (Memory)
Der Memory-Adapter speichert innerhalb des Serverprozesses. Er benötigt keinen externen Dienst:
import emdash, { memoryCache } from "emdash/astro";
import { sqlite } from "emdash/db";
export default defineConfig({
integrations: [
emdash({
database: sqlite({ url: "file:./data.db" }),
objectCache: memoryCache(),
}),
],
});
Optionen
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
defaultTtl | number | 3600 | Lebensdauer zwischengespeicherter Einträge in Sekunden. |
revalidate | number | 1000 | Isolat-lokales Epoch-Wiederverwendungsfenster in ms. |
maxEntries | number | 1000 | Maximale Anzahl zwischengespeicherter Schlüssel, bevor ältere verdrängt werden. |
keyPrefix | string | "em" | Präfix für jeden Cache-Schlüssel. |
Was wird zwischengespeichert
Der Object-Cache deckt die Lesevorgänge ab, die bei einem typischen Seitenrendering ausgeführt werden:
- Inhaltsabfragen:
getEmDashCollection,getEmDashEntryundresolveEmDashPath. - Seiteneinstellungen, Navigationsmenüs und Taxonomiebegriffe.
Admin-API-Anfragen, Mediendateien und vollständige HTML-Antworten werden hier nicht behandelt. Zum Zwischenspeichern gerenderter HTML-Seiten am Edge siehe Auf Cloudflare deployen.
Der Object-Cache und ein HTML-Edge-Cache lösen unterschiedliche Probleme. Ein Hit in der HTML-Schicht führt EmDash nicht aus. Bei einem Miss läuft der Worker, und eine Antwort, die den Route-Cache von Astro füllen könnte, umgeht den Object-Cache. Deren Inhaltsabfragen lesen aus der Datenbank, was verhindert, dass eine nach einer Inhaltsänderung geleerte Seite mit einem älteren KV-Snapshot neu aufgebaut wird.
Aktualität
Das Bearbeiten von Inhalten über das Admin-Panel oder die REST-API invalidiert die betroffenen Cache-Einträge automatisch. Das Erstellen, Aktualisieren, Veröffentlichen oder Löschen eines Eintrags löscht die zwischengespeicherten Abfragen für seine Sammlung; das Ändern einer Byline oder eines Taxonomiebegriffs löscht die Einträge, die ihn anzeigen.
Bei Anfragen, die keine Route-Cache-Fills sind, dauert es eine gewisse Zeit, bis eine Änderung in allen Isolaten sichtbar wird, während diese die erhöhte Epoch übernehmen. Bei dem isolat-internen Memory-Backend geschieht dies sofort. Bei Workers KV ist dies durch die Edge-Cache-Propagierung von KV begrenzt (eventuelle Konsistenz, bis zu ~60 Sekunden) plus das isolat-lokale revalidate-Fenster (Standard eine Sekunde). Senken Sie revalidate für schnellere lokale Propagierung auf Kosten von mehr Lesevorgängen gegen den Cache; erhöhen Sie es, um den Cache seltener zu lesen.
Geplante Inhalte
Geplante Einträge werden sichtbar, wenn ihre Veröffentlichungszeit erreicht ist. Eine zwischengespeicherte Seite spiegelt einen neu veröffentlichten geplanten Eintrag bei der nächsten Änderung an seiner Sammlung wider, oder wenn die defaultTtl des zwischengespeicherten Eintrags abgelaufen ist. Wenn präzise geplante Veröffentlichung für Ihre Website wichtig ist, setzen Sie eine niedrigere defaultTtl.