Daten am Edge speichern
Eine AEM Edge-Funktion muss Daten häufig am Edge nahe bei Ihren Besuchern aufbewahren und über Funktionsaufrufe hinweg wiederverwenden, ohne dass ein Roundtrip zum Ursprung erforderlich ist. AEM Edge-Funktionen bieten diesen Edge-Datenspeicher über einen KV-Speicher.
Ein KV-Speicher ist ein Schlüssel-Wert-Speicher, den Sie zur Laufzeit lesen und schreiben können. Die Daten bleiben zwischen den Funktionsaufrufen erhalten, sodass jeder Teil Ihres AEM Edge-Funktionscodes lesen kann, was ein anderer Teil zuvor geschrieben hat. Verwenden Sie ihn, um berechnete Ergebnisse zwischenzuspeichern, Umleitungszuordnungen zu speichern oder Daten anforderungsübergreifend freizugeben.
Verwendung eines KV-Speichers
Im Gegensatz zu configs, die Sie zur Bereitstellungszeit festlegen und nur lesen, wird ein KV-Speicher zur Laufzeit gelesen und geschrieben. Für Ihre AEM Edge-Funktion wird ein kv_default bereitgestellt, und alle zugehörigen Module oder Endpunkte können sie lesen und schreiben.
configsedgeFunctions.yamlconfig_defaultkv_defaultKV-Speicher aktivieren
Legen Sie kvs: true unter data in edgeFunctions.yaml als gleichrangiges Element von functions fest. Dieser eine Umschalter stellt den kv_default für die AEM Edge-Funktion bereit.
# config/edgeFunctions.yaml
kind: "EdgeFunctions"
version: "1"
data:
functions:
- name: my-edge-function
kvs: true # enable the KV store
Stellen Sie die aktualisierte Konfiguration über die Cloud Manager-Konfigurations-Pipeline oder mit aio aem rde:install -t env-config ./config in einer RDE bereit. Weitere Informationen finden unter „Einrichten von AEM Edge-Funktionen in " oder Einrichten von AEM Edge-Funktionen in ".
Lesen und Schreiben in Code
Öffnen Sie den kv_default Store, rufen Sie dann get(key) an und put(key, value, options?) Sie. Beide Aufrufe sind asynchron. Werte werden als Zeichenfolgen gespeichert, sodass Objekte beim Schreiben mit JSON.stringify() serialisiert werden. Beim Lesen macht der von get(key) zurückgegebene Eintrag text(), json() und arrayBuffer() verfügbar. Rufen Sie daher entry.json() auf, um ein gespeichertes -Objekt zu analysieren.
// src/index.js or handler file
import { KVStore } from "fastly:kv-store";
// open the KV store
const kv = new KVStore("kv_default");
// write a value (serialize objects to a string)
await kv.put("greeting", JSON.stringify({ text: "Hello from the edge" }));
// read a value (get returns an entry, or null when the key is missing)
const entry = await kv.get("greeting");
const value = entry ? await entry.json() : null;
Daten mit einem KV-Speicher zwischenspeichern
Ein gängiges Muster ist die Cache-Beibehaltung. Der Handler liest zuerst aus dem KV-Speicher und ruft das Backend nur bei einem Fehlschlag auf. Übergeben Sie eine ttl (in Sekunden) an put() und der Store läuft für Sie ab, sodass Sie den Ablauf nicht selbst verfolgen.
// src/lib/cache.js
import { KVStore } from "fastly:kv-store";
const kv = new KVStore("kv_default");
// Read a cached value, or null when the key is missing or expired
export async function getCached(key) {
const entry = await kv.get(key);
return entry ? await entry.json() : null;
}
// Cache a value; the store expires it after ttlSeconds
export async function setCached(key, payload, ttlSeconds) {
await kv.put(key, JSON.stringify(payload), { ttl: ttlSeconds });
}
Lesen Sie in einem Handler den Cache, kehren Sie bei einem Fehler zum Backend zurück und schreiben Sie dann das Ergebnis zurück.
let data = await getCached("inventory:west");
if (!data) {
data = await fetchFromBackend();
await setCached("inventory:west", data, 60); // store expires the entry after 60 seconds
}
Befüllen des KV-Speichers
Der KV-Speicher verfügt über kein Seeding während der Bereitstellung in edgeFunctions.yaml. Ihr Funktionscode schreibt jeden Wert zur Laufzeit. Zwei gemeinsame Ansätze sind:
- On-Demand. Füllen Sie einen Eintrag aus, wenn er zum ersten Mal angefordert wird, wie beim obigen Muster für die Cache-Beibehaltung.
- Über einen Wartungsendpunkt. Zeigen Sie einen Endpunkt an, der Einträge neu erstellt, und rufen Sie ihn dann nach einem Zeitplan auf. Dies eignet sich für große, sich langsam ändernde Datensätze wie Umleitungskarten.
Richtlinien
- Aktivieren Sie den Store mit
kvs: true, bevor Ihr Code ihn liest oder in ihn schreibt. - Der Store wird von allen AEM Edge-Funktions-Codes gemeinsam genutzt. Benennen Sie Ihre Schlüssel mit einem Präfix, z. B.
redirect:oderinventory:, damit verschiedene Module oder Endpunkte nicht kollidieren. - Bei Schlüsselnamen wird zwischen Groß- und Kleinschreibung unterschieden.
- Werte sind Zeichenfolgen. Serialisieren Sie Objekte mit
JSON.stringify()und analysieren Sie sie beim Lesen. - Verarbeiten Sie einen fehlenden Schlüssel.
get()gibtnullzurück, wenn der Schlüssel nicht vorhanden ist. - Ein KV-Speicher ist schließlich konsistent. Direkt nach einem Schreibvorgang kann ein Lesevorgang den vorherigen Wert kurz zurückgeben, sodass eine Abhängigkeit von Lese-nach-Schreibvorgang für kritische Logik vermieden wird.
Vollständiges Beispiel
Das Repository AEM Edge Functions Examples enthält ein KV-Speicherbeispiel mit vollständiger config/ und Code:
Zusätzliche Ressourcen
- Erstellen eines API-Endpunkts mit Edge-Funktionen
- Bereitstellen mehrerer Endpunkte mit Edge-Funktionen
- HTTP-Anforderungsfilter mit Edge-Funktionen
- Verwenden von Konfigurationen und Geheimnissen mit Edge-Funktionen
- Einrichten von AEM Edge-Funktionen in AEM as a Cloud Service
- Einrichten von AEM Edge-Funktionen in Edge Delivery Services
- Produktdokumentation zu AEM Edge-Funktionen
- Über Edge-Datenspeicher