設定物件快取

本頁內容

EmDash 的每請求快取已經在一次頁面渲染期間對相同的讀取進行了去重。可選的物件快取在請求之間保留選定的查詢結果,使後續請求能夠避免相同的資料庫讀取。當公開流量產生的資料庫讀取超出所選後端應處理的量時,它很有用。

資料庫仍然是唯一的事實來源。快取讀取在失敗時回退到資料庫,寫入會使受影響的快取命名空間失效。物件快取預設停用;透過向 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隔離本機的紀元重用視窗(毫秒)。參見新鮮度
timeoutnumber2000等待 KV 操作的最長時間(毫秒),逾時後視為快取未命中。防止 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"每個快取鍵的前綴。

快取的內容

物件快取涵蓋典型頁面渲染中執行的讀取:

  • 內容查詢:getEmDashCollectiongetEmDashEntryresolveEmDashPath
  • 站點設定、導覽選單和分類術語。

管理 API 請求、媒體檔案和完整 HTML 回應不在此處理。要在邊緣快取渲染的 HTML,請參見部署到 Cloudflare

物件快取和 HTML 邊緣快取解決不同的問題。HTML 層的快取未命中仍然執行 Worker;物件快取可以防止重複的內容查詢。HTML 層的快取命中則完全不執行 EmDash。

新鮮度

透過管理面板或 REST API 編輯內容會自動使受影響的快取條目失效。建立、更新、發佈或刪除條目會清除其集合的快取查詢;變更作者名或分類術語會清除顯示它的條目。

對於匿名訪客,隨著各隔離取得更新的紀元,變更需要一段時間才能在所有隔離中顯示。使用隔離內記憶體後端這是即時的。使用 Workers KV 時,受限於 KV 的邊緣快取傳播(最終一致性,最多約 60 秒)加上隔離本機的 revalidate 視窗(預設一秒)。降低 revalidate 以更快的本機傳播為代價增加對快取的讀取;提高它以減少快取讀取頻率。

排程內容

排程條目在其發佈時間過後變得可見。快取頁面在其集合的下一次變更時或快取條目的 defaultTtl 到期時反映新發佈的排程條目。如果精確的排程發佈對你的站點很重要,請設定較低的 defaultTtl