가장자리에 데이터 저장
AEM Edge 함수는 종종 데이터를 가장자리에 두고 방문자와 가까이에서 유지한 다음 원본을 왕복하지 않고 함수 호출 간에 재사용해야 합니다. AEM Edge 함수는 KV 스토어를 통해 이 에지 데이터 저장소를 제공합니다.
KV 스토어는 런타임 시 읽고 쓰는 키-값 스토어입니다. 해당 데이터는 함수 호출 사이에 유지되므로 AEM Edge 함수 코드의 모든 부분에서 이전에 다른 부분이 기록한 내용을 읽을 수 있습니다. 계산된 결과를 캐시하거나, 리디렉션 맵을 유지하거나, 요청 간에 데이터를 공유하는 데 사용합니다.
KV 스토어를 사용하는 경우
배포 시 읽기 전용으로 설정한 configs과(와) 달리 KV 스토어는 런타임 시 읽고 씁니다. AEM Edge 함수에 대해 하나의 kv_default 저장소가 프로비저닝되며, 해당 모듈 또는 종단점은 해당 저장소에 읽고 쓸 수 있습니다.
configsedgeFunctions.yaml에 배포 시config_defaultkv_defaultKV 스토어 활성화
edgeFunctions.yaml의 data 아래에 kvs: true을(를) functions의 동위 멤버로 설정합니다. 이 토글을 통해 AEM Edge 함수에 대한 kv_default 스토어를 프로비저닝할 수 있습니다.
# config/edgeFunctions.yaml
kind: "EdgeFunctions"
version: "1"
data:
functions:
- name: my-edge-function
kvs: true # enable the KV store
Cloud Manager 구성 파이프라인을 통해 또는 RDE에서 aio aem rde:install -t env-config ./config을(를) 사용하여 업데이트된 구성을 배포합니다. 자세한 내용은 AEM에서 Edge 기능 설정 또는 Edge Delivery Services에서 AEM Edge 기능 설정을 참조하십시오.
코드에서 읽기 및 쓰기
kv_default 스토어를 연 다음 get(key) 및 put(key, value, options?)을(를) 호출합니다. 두 호출은 모두 비동기적입니다. 값은 문자열로 저장되므로 쓰기 시 JSON.stringify()을(를) 사용하여 개체를 serialize합니다. 읽을 때 get(key)에서 반환된 항목이 text(), json() 및 arrayBuffer()을(를) 노출하므로 entry.json()을(를) 호출하여 저장된 개체를 구문 분석합니다.
// 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;
KV 스토어로 데이터 캐시
일반적인 패턴은 캐시 전용입니다. 핸들러가 먼저 KV 스토어에서 읽고 누락된 경우에만 백엔드를 호출합니다. put()에 ttl(초)을(를) 전달하면 스토어에서 자동으로 항목을 만료하므로 직접 만료를 추적하지 않습니다.
// 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 });
}
핸들러에서 캐시를 읽고 실패 시 백엔드로 폴백한 다음 결과를 다시 씁니다.
let data = await getCached("inventory:west");
if (!data) {
data = await fetchFromBackend();
await setCached("inventory:west", data, 60); // store expires the entry after 60 seconds
}
KV 스토어 채우기
edgeFunctions.yaml에서 KV 스토어에 배포 시간 시드가 없습니다. 함수 코드는 런타임에 모든 값을 기록합니다. 두 가지 일반적인 접근 방식은 다음과 같습니다.
- 요청 시. 위의 캐시 보조 패턴처럼 항목을 처음 요청할 때 채웁니다.
- 유지 관리 끝점을 통해. 항목을 재구축하는 끝점을 노출한 다음 일정에 따라 호출합니다. 이 기능은 리디렉션 맵과 같이 크기가 크고 변경 속도가 느린 데이터 세트에 적합합니다.
지침
- 코드를 읽거나 쓰기 전에
kvs: true을(를) 사용하여 스토어를 사용하도록 설정합니다. - 저장소는 모든 AEM Edge 함수 코드에서 공유됩니다. 서로 다른 모듈 또는 끝점이 충돌하지 않도록
redirect:또는inventory:과(와) 같은 접두사를 사용하여 키에 네임스페이스를 지정하십시오. - 키 이름은 대소문자를 구분합니다.
- 값은 문자열입니다. 개체를
JSON.stringify()(으)로 serialize하고 읽을 때 구문 분석합니다. - 누락된 키를 처리합니다. 키가 없으면
get()에서null을(를) 반환합니다. - KV 매장은 결국 일관성이 있습니다. 쓰기 직후 읽기는 이전 값을 잠시 반환할 수 있으므로 중요한 논리에 대한 쓰기 후 읽기에 의존하지 않도록 합니다.
완전한 예
AEM Edge 기능 예 저장소에는 전체 config/ 및 코드가 있는 KV 스토어 예가 포함됩니다.