EmDash 在每次請求時從資料庫讀取內容和網站設定。物件快取將這些查詢結果儲存在快速的鍵/值儲存中,使得重複請求從快取而非資料庫中提供。它減少了資料庫的讀取負載 — 在 Cloudflare 上特別有用,KV 每秒能服務的請求遠多於 D1。
物件快取是選擇性的,預設停用。透過向 emdash() 整合新增 objectCache 配接器來啟用它。
概覽
| 後端 | 最適合 | 跨隔離區共享 |
|---|---|---|
| KV | Cloudflare Workers | 是 |
| Memory | Node.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>" 選項
| 選項 | 型別 | 預設值 | 說明 |
|---|---|---|---|
binding | string | — | Wrangler 設定中的 KV 繫結名稱。必填。 |
defaultTtl | number | 3600 | 快取項目的存活時間(秒)。KV 強制最低 60 秒。 |
revalidate | number | 1000 | 隔離區本地的紀元重用視窗(毫秒)。參見新鮮度。 |
timeout | number | 2000 | 等待 KV 操作的最大時間(毫秒),逾時後視為快取未命中。防止停滯的 KV 讀取掛起請求。設為 0 停用。 |
keyPrefix | string | "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(),
}),
],
});
選項
| 選項 | 型別 | 預設值 | 說明 |
|---|---|---|---|
defaultTtl | number | 3600 | 快取項目的存活時間(秒)。 |
revalidate | number | 1000 | 隔離區本地的紀元重用視窗(ms)。 |
maxEntries | number | 1000 | 舊鍵被驅逐前的最大快取鍵數。 |
keyPrefix | string | "em" | 每個快取鍵的前綴。 |
快取的內容
物件快取涵蓋典型頁面渲染時執行的讀取:
- 內容查詢:
getEmDashCollection、getEmDashEntry和resolveEmDashPath。 - 網站設定、導覽選單和分類法術語。
管理 API 請求、媒體檔案和完整 HTML 回應不在此處理。要在邊緣快取渲染的 HTML,請參見部署到 Cloudflare。
新鮮度
透過管理面板或 REST API 編輯內容會自動使受影響的快取項目失效。建立、更新、發佈或刪除項目會清除其集合的快取查詢;變更署名或分類法術語會清除顯示它的項目。
對於匿名訪客,變更需要一些時間才能在所有隔離區中顯示,因為它們需要取得更新的紀元。使用隔離區內記憶體後端時這是即時的。使用 Workers KV 時,受 KV 的邊緣快取傳播(最終一致性,最多約 60 秒)加上隔離區本地的 revalidate 視窗(預設 1 秒)的限制。降低 revalidate 可加快本地傳播但增加快取讀取次數;提高它可減少快取讀取頻率。
排程內容
排程項目在其發佈時間過後變為可見。快取頁面在其集合的下一次變更時,或當快取項目的 defaultTtl 過期時,反映新發佈的排程項目。如果精確的排程發佈對你的網站很重要,請設定較低的 defaultTtl。