Memorizza dati al server Edge di

IMPORTANT
AEM Edge Functions è attualmente in versione beta. Le funzioni e la documentazione potrebbero cambiare. Per ricevere commenti, contattare aemcs-edgecompute-feedback@adobe.com.
NOTE
Gli archivi di configurazione, segreti e KV non sono disponibili nei programmi sandbox. Utilizza un ambiente non sandbox o un RDE per testare un archivio KV.

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.

configs
Archivio KV
Accesso
Sola lettura in fase di runtime
Lettura e scrittura in fase di runtime
Impostato da
Al momento della distribuzione in edgeFunctions.yaml
Il codice della funzione in fase di esecuzione
Nome store
config_default
kv_default
Usa per
Impostazioni statiche per ambiente
Dati che cambiano in fase di esecuzione

Abilita 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: true prima 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: o inventory:, 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() restituisce null quando 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:

Esempio
Archivio
Cosa dimostra
Ricerca mappa di reindirizzamento
publish-delivery-redirect-map
Legge i target di reindirizzamento dall’archivio KV al momento della richiesta, ricostruisce le voci di mappa condivise attraverso un endpoint di manutenzione e torna all’origine in caso di mancato reindirizzamento

Risorse aggiuntive

recommendation-more-help
experience-manager-learn-help-cloud-service