【きゃっしゅせんりゃく】

キャッシュ戦略 とは?

最終更新:
💡 「いつ」「何を」キャッシュして「いつ捨てる」かの戦略

キャッシュにいつデータを入れ、いつ更新・破棄するかを決める設計方針。速さと、元データとのずれ(古さ)のバランスを取る。

📌 このページのポイント
代表的なキャッシュ戦略の比較 Cache-Aside アプリ Cache DB ①Cacheを確認 ②なければDBから取得 ③取得した値をCacheに保存 Write-Through アプリ Cache DB 書込み: DBとCacheを両方更新 整合性◎ / 速度△ Write-Back アプリ Cache DB 書込み: Cache→後でDBへ 速度◎ / 整合性△ 特徴 Cache-Aside Write-Through Write-Back 読み取り速度 ◎ 速い ◎ 速い ◎ 速い 書き込み速度 ○ 普通 △ 遅い ◎ 速い データ整合性 ○ 普通 ◎ 高い △ リスク 実装の容易さ ◎ 簡単 ○ 普通 △ 複雑
代表的なキャッシュ戦略の比較(◎○△は相対的な目安。Write-BackはWrite-Behindとも呼ぶ)
ひよこ ひよこ
Cache-Asideって何?
ペンギン先生 ペンギン先生
よく使われる基本のパターンだよ。①アプリがキャッシュを確認、②あればそれを返す(ヒット)、③なければDBから取得してキャッシュに入れてから返す(ミス)。必要なデータだけがキャッシュに入るのが利点で、DBを更新してもキャッシュはそのままだから、古いデータが残る点に注意が必要だね。
ひよこ ひよこ
キャッシュが古くなる問題はどうするの?
ペンギン先生 ペンギン先生
①TTL(有効期限)を付けて期限切れで取り直す、②データ更新時にキャッシュを削除する、③Write-ThroughでDBに書くたびにキャッシュも更新する、などを組み合わせるよ。ただ、複数のサーバーが同時に更新するとずれが残ることもある。「キャッシュの無効化と命名はコンピューター科学の2大難問」という有名な言葉があるくらい、難しいところなんだ。
ひよこ ひよこ
TTLはどれくらいにすればいいの?
ペンギン先生 ペンギン先生
決まった正解はなくて、データがどれくらいの頻度で変わるか、古い値をどれくらい許せるかで決めるよ。たとえば変更の少ない商品カテゴリは長め、在庫数のように正確さが大事なものは短くするかキャッシュしない、という考え方だね。AWSも、値は実際の動きを測って決めるよう勧めているよ。
ひよこ ひよこ
キャッシュの落とし穴は?
ペンギン先生 ペンギン先生
代表的なのは、新しいサーバーの起動直後などでキャッシュが空のときに、大量のリクエストが一斉にDBへ向かう問題だよ。Thundering HerdやCache Stampedeと呼ばれるね。AWSの資料では、まだキャッシュにないデータの取得を1件だけにまとめて、ほかのリクエストはその結果を待たせる「リクエスト合体」という対策が紹介されているんだ。
ひよこ ひよこ
DBが止まったときに、キャッシュで何とかならないの?
ペンギン先生 ペンギン先生
AWSの資料では、TTLを「ここで更新を試みる期限」と「ここまでは古くても返してよい期限」の2段階にして、元のDBやサービスが落ちている間は少し古い値で応答を続ける方法が紹介されているよ。エラー応答を短いTTLでキャッシュして、落ちている相手へ何度も問い合わせない工夫もあるんだ。どこまで古い値を許すかは、データの性質で決めよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「キャッシュ戦略」って出てきたら「キャッシュにいつ入れて、いつ更新・破棄するかの設計」と思えればだいたいOK!
📖 おまけ:英語の意味
「Caching Strategy」 = キャッシュ戦略
💬 Cache(キャッシュ)のStrategy(戦略)。どのパターンでキャッシュを管理するかの設計だよ

参考資料

← 用語集にもどる