EmDash liest Inhalte und Seitenkonfiguration bei jeder Anfrage aus der Datenbank. Der Objekt-Cache speichert diese Abfrageergebnisse in einem schnellen Key/Value-Speicher, sodass wiederholte Anfragen aus dem Cache statt aus der Datenbank bedient werden. Er reduziert die Leselast auf die Datenbank — nützlich auf Cloudflare, wo KV weit mehr Anfragen pro Sekunde bedient als D1.
Der Objekt-Cache ist optional und standardmäßig deaktiviert. Aktivieren Sie ihn, indem Sie einen objectCache-Adapter zur emdash()-Integration hinzufügen.
Überblick
| Backend | Ideal für | Über Isolates hinweg geteilt |
|---|---|---|
| KV | Cloudflare Workers | Ja |
| Memory | Node.js, lokale Entwicklung | Nein (pro Prozess) |
Auf Cloudflare werden Anfragen von vielen kurzlebigen Isolates in verschiedenen Regionen bedient. KV wird von allen geteilt, sodass ein Wert, der von einer Anfrage gecacht wurde, für die nächste verfügbar ist — überall. Das Memory-Backend cached innerhalb eines einzelnen Prozesses, was für einen langlebigen Node.js-Server geeignet ist.
Cloudflare KV
Konfigurieren Sie den KV-Adapter und verweisen Sie auf ein KV-Binding:
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 das Binding 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 Binding-Namen 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-Binding-Name aus Ihrer Wrangler-Konfiguration. Erforderlich. |
defaultTtl | number | 3600 | Time-to-Live für gecachte Einträge, in Sekunden. KV erzwingt ein Minimum von 60 Sekunden. |
revalidate | number | 1000 | Isolate-lokales Epochen-Wiederverwendungsfenster, in Millisekunden. Siehe Aktualität. |
timeout | number | 2000 | Maximale Zeit in Millisekunden, die auf eine KV-Operation gewartet wird, bevor sie als Cache-Miss behandelt wird. Schützt davor, dass ein blockierter KV-Lesevorgang die Anfrage aufhält. 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 cached 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 | Time-to-Live für gecachte Einträge, in Sekunden. |
revalidate | number | 1000 | Isolate-lokales Epochen-Wiederverwendungsfenster, in ms. |
maxEntries | number | 1000 | Maximale Anzahl gecachter Schlüssel, bevor ältere Schlüssel verdrängt werden. |
keyPrefix | string | "em" | Präfix für jeden Cache-Schlüssel. |
Was gecacht wird
Der Objekt-Cache deckt die Lesezugriffe ab, die bei einem typischen Seitenrender auftreten:
- Inhaltsabfragen:
getEmDashCollection,getEmDashEntryundresolveEmDashPath. - Seiteneinstellungen, Navigationsmenüs und Taxonomiebegriffe.
Admin-API-Anfragen, Mediendateien und vollständige HTML-Antworten werden hier nicht behandelt. Für das Caching gerenderter HTML-Seiten am Edge siehe Auf Cloudflare bereitstellen.
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 gecachten Abfragen für seine Kollektion; das Ändern einer Autorenzeile oder eines Taxonomiebegriffs löscht die Einträge, die ihn anzeigen.
Für anonyme Besucher dauert es nach einer Änderung einige Zeit, bis sie in allen Isolates sichtbar ist, wenn diese die aktualisierte Epoche übernehmen. Mit dem In-Isolate-Memory-Backend ist dies sofort. Bei Workers KV ist es begrenzt durch KVs Edge-Cache-Propagierung (Eventual Consistency, bis zu ~60 Sekunden) plus das Isolate-lokale revalidate-Fenster (Standard eine Sekunde). Senken Sie revalidate für schnellere lokale Propagierung auf Kosten von mehr Lesezugriffen auf den Cache; erhöhen Sie es, um den Cache seltener zu lesen.
Geplante Inhalte
Geplante Einträge werden sichtbar, wenn ihre Veröffentlichungszeit abgelaufen ist. Eine gecachte Seite spiegelt einen neu veröffentlichten geplanten Eintrag bei der nächsten Änderung an seiner Kollektion wider, oder wenn die defaultTtl des gecachten Eintrags abläuft. Wenn präzise geplante Veröffentlichung für Ihre Site wichtig ist, setzen Sie eine niedrigere defaultTtl.