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 へ移行 |
確認
次に読む
- リレーショナル → 38-d1-database
- CDN 全般・DNS → 42-dns-and-security
- 強整合の状態 → 36-durable-objects