Almacenar datos en Edge

IMPORTANT
Funciones de AEM Edge se encuentra en la versión beta. Las funciones y la documentación pueden cambiar. Para obtener comentarios, comuníquese con aemcs-edgecompute-feedback@adobe.com.
NOTE
Las tiendas de configuración, secretas y KVStore no están disponibles en los programas de zonas protegidas. Utilice un entorno que no sea de zona protegida o un RDE para probar un KVStore.

Una función Edge de AEM suele necesitar mantener los datos en el perímetro, cerca de los visitantes y reutilizarlos en invocaciones de funciones sin un viaje de ida y vuelta al origen. Las funciones Edge de AEM proporcionan este almacenamiento de datos perimetral a través de un KVStore.

Un KVStore es un almacén de clave-valor que se lee y se escribe durante la ejecución. Sus datos persisten entre invocaciones de funciones, por lo que cualquier parte del código de funciones de AEM Edge puede leer lo que otra parte escribió anteriormente. Utilícelo para almacenar en caché los resultados calculados, mantener mapas de redireccionamiento o compartir datos entre solicitudes.

Cuándo usar un KVStore

A diferencia de configs, que se establece en tiempo de implementación y solo lectura, un KVStore se lee y se escribe durante la ejecución. Se ha aprovisionado un almacén kv_default para la función Edge de AEM y cualquiera de sus módulos o extremos puede leer y escribir en él.

configs
KVStore
Acceso
Solo lectura durante la ejecución
Leer y escribir durante la ejecución
Configurado por
Usted, en tiempo de implementación en edgeFunctions.yaml
Su código de función durante la ejecución
Nombre del almacén
config_default
kv_default
Usar para
Configuración estática por entorno
Datos que cambian durante la ejecución

Habilitar el KVStore

Establezca kvs: true bajo data en edgeFunctions.yaml, como secundario de functions. Esta opción aprovisiona el almacén kv_default para la función Edge de AEM.

# config/edgeFunctions.yaml
kind: "EdgeFunctions"
version: "1"
data:
  functions:
    - name: my-edge-function
  kvs: true # enable the KV store

Implemente la configuración actualizada a través de la canalización de configuración de Cloud Manager, o con aio aem rde:install -t env-config ./config en un RDE. Consulte Configurar funciones de AEM Edge en AEM as a Cloud Service o Configurar funciones de AEM Edge en Edge Delivery Services para obtener más información.

Leer y escribir en código

Abra el almacén kv_default, luego llame a get(key) y put(key, value, options?). Ambas llamadas son asincrónicas. Los valores se almacenan como cadenas, por lo que debe serializar los objetos con JSON.stringify() durante la escritura. En lectura, la entrada devuelta por get(key) expone text(), json() y arrayBuffer(), por lo que llame a entry.json() para analizar un objeto almacenado.

// 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;

Almacenar datos en caché con un KVStore

Un patrón común es la caché de lado. El controlador lee primero del KVStore y llama al backend solo en caso de error. Pase un ttl (en segundos) a put() y la tienda caducará la entrada por usted, por lo que no realizará el seguimiento de la caducidad usted mismo.

// 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 });
}

En un controlador, lea la caché, vuelva al back-end en caso de error y, a continuación, escriba el resultado de nuevo.

let data = await getCached("inventory:west");
if (!data) {
  data = await fetchFromBackend();
  await setCached("inventory:west", data, 60); // store expires the entry after 60 seconds
}

Rellenar el KVStore

El KVStore no tiene una inicialización en tiempo de implementación en edgeFunctions.yaml. El código de función escribe todos los valores en tiempo de ejecución. Dos enfoques comunes son:

  • Bajo demanda. Rellene una entrada la primera vez que se solicite, como lo hace el patrón de caché lateral anterior.
  • A través de un extremo de mantenimiento. Exponga un extremo que vuelva a generar entradas y, a continuación, llámele según una programación. Esto se adapta a conjuntos de datos grandes que cambian lentamente, como mapas de redireccionamiento.

Directrices

  • Habilite el almacén con kvs: true antes de que su código lo lea o escriba en él.
  • La tienda se comparte mediante todo el código de función de AEM Edge. El área de nombres asigna claves con un prefijo, como redirect: o inventory:, de modo que los distintos módulos o extremos no entran en conflicto.
  • Los nombres de clave distinguen entre mayúsculas y minúsculas.
  • Los valores son cadenas. Serialice los objetos con JSON.stringify() y analícelos en el momento de la lectura.
  • Gestionar una clave que falta. get() devuelve null cuando la clave no existe.
  • Una KVS es finalmente consistente. Justo después de una escritura, una lectura puede devolver brevemente el valor anterior, por lo que evite depender de la lectura después de la escritura para la lógica crítica.

Ejemplo completo

El repositorio AEM Edge Functions samples incluye un ejemplo de KVS Store con config/ y código completos:

Ejemplo
Repositorio
Lo que demuestra
Búsqueda de mapa de redireccionamiento
publish-delivery-redirect-maps
Lee los destinos de redireccionamiento del KVStore a petición, reconstruye las entradas de mapas compartidos a través de un punto final de mantenimiento y vuelve al origen en caso de error

Recursos adicionales

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