Gadget 40:KV とキャッシュ/CDN

キーバリュー KV と CDN キャッシュの使いどころ・特性・高速化の組み合わせ

KV とキャッシュ / CDN

「読み取りが速い」は KV と CDN で作り込みます。特性と使い分けを整理します。

目的

  • KV の「最終的に整合・書き込みは遅い」特性を正確に理解する
  • CDN キャッシュで配信を高速化する

前提条件

  • Workers 基礎(35-workers-basics
  • 公式: https://developers.cloudflare.com/kv/ / https://developers.cloudflare.com/cache/

KV とは

  • グローバル分散のキーバリューストア
  • 最終的に整合(書き込み後、即座に全リージョンへ反映されない)
  • 読み出しは速く、大量の小さな値を読む用途に向く

向くもの / 向かないもの

向く 向かない
設定・機能フラグ 頻繁に書く値
画像・メタデータのキャッシュ トランザクション必須のデータ
セッション(読み主力) 強整合が必要なデータ(→ D1 / DO)

手順

1. ネームスペースとバインド

npx wrangler kv namespace create SETTINGS
[[kv_namespaces]]
binding = "SETTINGS"
id = "<namespace-id>"

2. 読み書きする

// 設定のキャッシュとして使う例
const cached = await env.SETTINGS.get("theme");
if (cached !== null) return new Response(cached);
// 未取得なら元データから取得してキャッシュ

3. CDN キャッシュでフロントを高速化

  • Cloudflare 配下の静的配信(Images / サイト)は自動キャッシュされる
  • キャッシュさせたくない動的レスポンスには Cache-Control: no-store を明示
new Response(body, {
  headers: { "Cache-Control": "public, max-age=3600" }, // 1 時間キャッシュ
});

よくある失敗

症状 原因 対処
書き込み後に古い値が返る 最終的整合を理解していない 書き込み直後の読み取りは KV に期待しない
キャッシュが効かない Cache-Control 未設定 max-age / s-maxage を明示
stale が残る キャッシュ無効化漏れ 更新時に purge またはバージョン型 URL へ
KV をトランザクションに使う 用途誤り D1 / DO へ移行

確認

次に読む