오브젝트 캐시

이 페이지

EmDash는 매 요청마다 데이터베이스에서 콘텐츠와 사이트 설정을 읽습니다. 오브젝트 캐시는 이러한 쿼리 결과를 빠른 키/값 저장소에 저장하여 반복 요청이 데이터베이스 대신 캐시에서 제공됩니다. 데이터베이스의 읽기 부하를 줄여줍니다 — KV가 D1보다 초당 훨씬 더 많은 요청을 처리하는 Cloudflare에서 특히 유용합니다.

오브젝트 캐시는 선택사항이며 기본적으로 비활성화되어 있습니다. emdash() 통합에 objectCache 어댑터를 추가하여 활성화합니다.

개요

백엔드최적 용도아이솔레이트 간 공유
KVCloudflare Workers
MemoryNode.js, 로컬 개발아니오 (프로세스별)

Cloudflare에서 요청은 여러 리전에 걸친 수많은 단기 아이솔레이트에 의해 처리됩니다. KV는 모든 아이솔레이트가 공유하므로, 한 요청에서 캐시된 값은 다음 요청에서 어디서든 사용 가능합니다. 메모리 백엔드는 단일 프로세스 내에서 캐시하며, 장기 실행 Node.js 서버에 적합합니다.

Cloudflare KV

KV 어댑터를 구성하고 KV 바인딩을 지정합니다:

import emdash from "emdash/astro";
import { d1, r2, kvCache } from "@emdash-cms/cloudflare";

export default defineConfig({
	integrations: [
		emdash({
			database: d1({ binding: "DB" }),
			storage: r2({ binding: "MEDIA" }),
			objectCache: kvCache({ binding: "CACHE" }),
		}),
	],
});

설정

KV 네임스페이스를 생성하고 Wrangler 설정에 바인딩을 추가합니다.

npx wrangler kv namespace create CACHE

명령은 네임스페이스 id를 출력합니다. kvCache에서 사용한 바인딩 이름 아래에 추가하세요:

wrangler.jsonc

{
  "kv_namespaces": [
    {
      "binding": "CACHE",
      "id": "<namespace-id>"
    }
  ]
}

wrangler.toml

[[kv_namespaces]]
binding = "CACHE"
id = "<namespace-id>"

옵션

옵션타입기본값설명
bindingstringWrangler 설정의 KV 바인딩 이름. 필수.
defaultTtlnumber3600캐시 항목의 생존 시간(초). KV는 최소 60초를 강제합니다.
revalidatenumber1000아이솔레이트 로컬 에포크 재사용 윈도우(밀리초). 신선도 참조.
timeoutnumber2000KV 작업을 기다리는 최대 시간(밀리초). 이 시간을 초과하면 캐시 미스로 처리됩니다. 중단된 KV 읽기가 요청을 멈추는 것을 방지합니다. 0으로 설정하면 비활성화.
keyPrefixstring"em"모든 캐시 키의 접두사. 여러 사이트가 하나의 네임스페이스를 공유할 때 고유 값을 설정합니다.

Node.js (메모리)

메모리 어댑터는 서버 프로세스 내에서 캐시합니다. 외부 서비스가 필요 없습니다:

import emdash, { memoryCache } from "emdash/astro";
import { sqlite } from "emdash/db";

export default defineConfig({
	integrations: [
		emdash({
			database: sqlite({ url: "file:./data.db" }),
			objectCache: memoryCache(),
		}),
	],
});

옵션

옵션타입기본값설명
defaultTtlnumber3600캐시 항목의 생존 시간(초).
revalidatenumber1000아이솔레이트 로컬 에포크 재사용 윈도우(ms).
maxEntriesnumber1000오래된 키가 제거되기 전 최대 캐시 키 수.
keyPrefixstring"em"모든 캐시 키의 접두사.

캐시되는 항목

오브젝트 캐시는 일반적인 페이지 렌더링 시 실행되는 읽기를 처리합니다:

  • 콘텐츠 쿼리: getEmDashCollection, getEmDashEntry, resolveEmDashPath.
  • 사이트 설정, 내비게이션 메뉴, 택소노미 용어.

관리 API 요청, 미디어 파일, 완전한 HTML 응답은 여기서 처리되지 않습니다. 엣지에서 렌더링된 HTML을 캐시하려면 Cloudflare에 배포를 참조하세요.

신선도

관리 패널이나 REST API를 통해 콘텐츠를 편집하면 영향받는 캐시 항목이 자동으로 무효화됩니다. 항목을 생성, 업데이트, 게시 또는 삭제하면 해당 컬렉션의 캐시된 쿼리가 지워집니다. 저자 서명이나 택소노미 용어를 변경하면 이를 표시하는 항목이 지워집니다.

익명 방문자의 경우, 변경사항이 모든 아이솔레이트에 나타나려면 각 아이솔레이트가 업데이트된 에포크를 가져올 때까지 시간이 걸립니다. 아이솔레이트 내 메모리 백엔드에서는 즉각적입니다. Workers KV에서는 KV의 엣지 캐시 전파(결과적 일관성, 최대 ~60초)에 아이솔레이트 로컬 revalidate 윈도우(기본 1초)를 더한 시간으로 제한됩니다. revalidate를 낮추면 로컬 전파가 빨라지지만 캐시에 대한 읽기가 증가합니다. 높이면 캐시를 덜 자주 읽습니다.

예약된 콘텐츠

예약된 항목은 게시 시간이 지나면 표시됩니다. 캐시된 페이지는 해당 컬렉션에 다음 변경이 있을 때, 또는 캐시된 항목의 defaultTtl이 만료될 때 새로 게시된 예약 항목을 반영합니다. 사이트에서 정확한 예약 게시가 중요한 경우 더 낮은 defaultTtl을 설정하세요.