Object-Cache konfigurieren

Auf dieser Seite

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

BackendAm besten fürZwischen Isolaten geteilt
KVCloudflare WorkersJa
MemoryNode.js, lokale EntwicklungNein (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

OptionTypStandardBeschreibung
bindingstringKV-Bindungsname aus Ihrer Wrangler-Konfiguration. Erforderlich.
defaultTtlnumber3600Lebensdauer zwischengespeicherter Einträge in Sekunden. KV erzwingt ein Minimum von 60 Sekunden.
revalidatenumber1000Isolat-lokales Epoch-Wiederverwendungsfenster in Millisekunden. Siehe Aktualität.
timeoutnumber2000Maximale 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.
keyPrefixstring"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

OptionTypStandardBeschreibung
defaultTtlnumber3600Lebensdauer zwischengespeicherter Einträge in Sekunden.
revalidatenumber1000Isolat-lokales Epoch-Wiederverwendungsfenster in ms.
maxEntriesnumber1000Maximale Anzahl zwischengespeicherter Schlüssel, bevor ältere verdrängt werden.
keyPrefixstring"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, getEmDashEntry und resolveEmDashPath.
  • 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 Cache-Miss in der HTML-Schicht führt trotzdem den Worker aus; der Object-Cache kann dann wiederholte Inhaltsabfragen verhindern. Ein Hit in der HTML-Schicht führt EmDash überhaupt nicht aus.

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 eines Autornamens oder Taxonomiebegriffs löscht die Einträge, die ihn anzeigen.

Für anonyme Besucher dauert es eine gewisse Zeit, bis eine Änderung über alle Isolate sichtbar wird, wenn diese die aktualisierte Epoch übernehmen. Mit dem In-Isolat-Memory-Backend ist dies sofort. Mit Workers KV ist es durch die KV-Edge-Cache-Propagierung 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.