Memorizza dati al server Edge di
Una funzione Edge di AEM spesso deve mantenere i dati al limite, vicino ai visitatori, e riutilizzarli tra le chiamate di funzione senza un viaggio di andata e ritorno all’origine. Le funzioni Edge di AEM forniscono l’archiviazione dei dati edge tramite un archivio KV.
Un archivio KV è un archivio chiave-valore che puoi leggere e scrivere in fase di runtime. I relativi dati persistono tra le chiamate di funzione, pertanto qualsiasi parte del codice della funzione AEM Edge può leggere ciò che un’altra parte ha scritto in precedenza. Utilizzala per memorizzare nella cache i risultati calcolati, mantenere le mappe di reindirizzamento o condividere i dati tra le richieste.
Quando utilizzare un archivio KV
A differenza di configs, che viene impostato in fase di distribuzione e in sola lettura, un archivio KV viene letto e scritto in fase di esecuzione. È stato eseguito il provisioning di un archivio kv_default per la funzione Edge di AEM e qualsiasi modulo o endpoint può leggerlo e scrivervi.
configsedgeFunctions.yamlconfig_defaultkv_defaultAbilita l’archivio KV
Imposta kvs: true sotto data in edgeFunctions.yaml, come pari livello di functions. Questo attiva/disattiva l’archivio kv_default per la funzione Edge di AEM.
# config/edgeFunctions.yaml
kind: "EdgeFunctions"
version: "1"
data:
functions:
- name: my-edge-function
kvs: true # enable the KV store
Distribuire la configurazione aggiornata tramite la pipeline di configurazione di Cloud Manager o con aio aem rde:install -t env-config ./config in un RDE. Per ulteriori dettagli, vedere Configurare le funzioni Edge di AEM in AEM as a Cloud Service o Configurare le funzioni Edge di AEM in Edge Delivery Services.
Lettura e scrittura nel codice
Apri l’archivio kv_default, quindi chiama get(key) e put(key, value, options?). Entrambe le chiamate sono asincrone. I valori sono archiviati come stringhe, pertanto serializzare gli oggetti con JSON.stringify() in scrittura. Alla lettura, la voce restituita da get(key) espone text(), json() e arrayBuffer(), quindi chiama entry.json() per analizzare un oggetto archiviato.
// 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;
Memorizzare i dati nella cache con un archivio KV
Un pattern comune è il cache-aside. Il gestore legge prima dall’archivio KV e chiama il backend solo in caso di mancato recapito. Passa un ttl (in secondi) a put() e l’archivio scade l’immissione, pertanto non puoi tenere traccia della scadenza.
// 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 });
}
In un gestore, leggi la cache, torna al backend in caso di errore, quindi riscrivi il risultato.
let data = await getCached("inventory:west");
if (!data) {
data = await fetchFromBackend();
await setCached("inventory:west", data, 60); // store expires the entry after 60 seconds
}
Popolare l’archivio KV
L’archivio KV non ha un seeding del tempo di distribuzione in edgeFunctions.yaml. Il codice della funzione scrive ogni valore in fase di runtime. Due approcci comuni sono:
- Su richiesta. Compila una voce la prima volta che viene richiesta, come nel caso del modello cache-aside precedente.
- Tramite un endpoint di manutenzione. Esponi un endpoint che ricostruisce le voci, quindi chiamalo secondo una pianificazione. Questa funzione è adatta a set di dati di grandi dimensioni e a modifica lenta, come le mappe di reindirizzamento.
Linee guida
- Abilita l’archivio con
kvs: trueprima che il codice lo legga o lo scriva. - Lo store è condiviso da tutto il codice della funzione Edge di AEM. Spazio dei nomi delle chiavi con un prefisso, ad esempio
redirect:oinventory:, in modo che moduli o endpoint diversi non si scontrino. - I nomi delle chiavi fanno distinzione tra maiuscole e minuscole.
- I valori sono stringhe. Serializzare gli oggetti con
JSON.stringify()e analizzarli durante la lettura. - Gestisci una chiave mancante.
get()restituiscenullquando la chiave non esiste. - Un archivio KV alla fine è coerente. Subito dopo una scrittura, una lettura può restituire brevemente il valore precedente, in modo da evitare di dipendere dalla lettura dopo la scrittura per una logica critica.
Esempio completo
L’archivio AEM Edge Functions examples include un esempio di archivio KV con config/ completo e codice:
Risorse aggiuntive
- Creare un endpoint API con funzioni Edge
- Distribuire più endpoint con le funzioni Edge
- Filtri di richiesta HTTP con funzioni Edge
- Utilizzare configurazioni e segreti con le funzioni di Edge
- Configurare le funzioni Edge di AEM su AEM as a Cloud Service
- Configurare le funzioni AEM Edge su Edge Delivery Services
- Documentazione del prodotto per le funzioni di AEM Edge
- Informazioni sugli archivi dati edge