Stocker les données à la périphérie
Une fonction AEM Edge a souvent besoin de conserver les données à la périphérie, à proximité de vos visiteurs, et de les réutiliser entre les appels de fonction sans aller-retour vers l’origine. Les fonctions AEM Edge fournissent ce stockage de données Edge par le biais d’un magasin KV.
Un KV store est un magasin de valeurs clés que vous lisez et écrivez au moment de l’exécution. Ses données persistent entre les appels de fonction, de sorte que toute partie de votre code de fonction AEM Edge puisse lire ce qu’une autre partie a écrit précédemment. Utilisez-le pour mettre en cache les résultats calculés, contenir des mappages de redirection ou partager des données entre les requêtes.
Quand utiliser un KV Store
Contrairement à configs, que vous définissez au moment du déploiement et en lecture seule, un magasin KV est en lecture et en écriture au moment de l’exécution. Un magasin de kv_default est configuré pour votre fonction AEM Edge et tous ses modules ou points d’entrée peuvent y lire et y écrire.
configsedgeFunctions.yamlconfig_defaultkv_defaultActiver le KV store
Définissez kvs: true sous data dans edgeFunctions.yaml, comme frère de functions. Ce bouton (bascule) approvisionne le magasin de kv_default pour la fonction AEM Edge.
# config/edgeFunctions.yaml
kind: "EdgeFunctions"
version: "1"
data:
functions:
- name: my-edge-function
kvs: true # enable the KV store
Déployez la configuration mise à jour via le pipeline de configuration Cloud Manager ou avec aio aem rde:install -t env-config ./config sur un RDE. Voir Configuration des fonctions AEM Edge sur AEM as a Cloud Service ou Configuration des fonctions AEM Edge sur Edge Delivery Services pour plus d’informations.
Lecture et écriture dans le code
Ouvrez le magasin de kv_default, puis appelez get(key) et put(key, value, options?). Les deux appels sont asynchrones. Les valeurs sont stockées sous forme de chaînes, donc sérialisez les objets avec des JSON.stringify() à l’écriture. Lors de la lecture, l’entrée renvoyée par get(key) expose text(), json() et arrayBuffer(). Par conséquent, appelez entry.json() pour analyser un objet stocké.
// 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;
Mettre en cache des données avec un KV Store
Un modèle courant est le cache-side. Le gestionnaire lit d’abord le magasin KV et appelle le serveur principal uniquement en cas d’échec. Transmettez une ttl (en secondes) à put() et le magasin fait expirer l’entrée pour vous, afin que vous ne puissiez pas suivre l’expiration vous-même.
// 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 });
}
Dans un gestionnaire , lisez le cache, revenez sur le serveur principal en cas d’échec, puis réécrivez le résultat.
let data = await getCached("inventory:west");
if (!data) {
data = await fetchFromBackend();
await setCached("inventory:west", data, 60); // store expires the entry after 60 seconds
}
Renseigner la boutique KV
Le magasin KV n’a pas d’amorçage au moment du déploiement en edgeFunctions.yaml. Votre code de fonction écrit chaque valeur au moment de l’exécution. Deux approches courantes sont les suivantes :
- À la demande. Renseignez une entrée la première fois qu’elle est demandée, comme le fait le modèle de mise en cache ci-dessus.
- Via un point d’entrée de maintenance. Exposez un point d’entrée qui reconstruit les entrées, puis appelez-le selon un planning. Cela convient aux jeux de données volumineux et à évolution lente tels que les cartes de redirection.
Directives
- Activez le magasin avec
kvs: trueavant que votre code ne le lise ou ne l’écrive. - Le magasin est partagé par tout votre code de fonction AEM Edge. Mettez vos clés dans un espace de noms avec un préfixe, tel que
redirect:ouinventory:, afin que différents modules ou points d’entrée n’entrent pas en conflit. - Les noms clés respectent la casse.
- Les valeurs sont des chaînes. Sérialisez les objets avec
JSON.stringify()et analysez-les lors de la lecture. - Gérer une clé manquante.
get()renvoienulllorsque la clé n’existe pas. - Un magasin KV finit par être cohérent. Juste après une écriture, une lecture peut renvoyer brièvement la valeur précédente, évitez donc de dépendre de la lecture après écriture pour une logique critique.
Exemple complet
Le référentiel Exemples de fonctions AEM Edge comprend un exemple de magasin KV avec un config/ et un code complets :
Ressources supplémentaires
- Créer un point d’entrée d’API avec les fonctions Edge
- Servir plusieurs points d’entrée avec des fonctions Edge
- Filtres de requêtes HTTP avec les fonctions Edge
- Utiliser des configurations et des secrets avec les fonctions Edge
- Configurer les fonctions AEM Edge sur AEM as a Cloud Service
- Configurer les fonctions AEM Edge sur Edge Delivery Services
- Documentation du produit Fonctions AEM Edge
- À propos des entrepôts de données Edge