キャッシュ — よく使う答えを手元に置く係

上級の解説は準備中のため、上級の内容を表示しています。

概要 — まず全体をつかむ

中級では戦略と無効化を見ました。上級では、一貫性・スタンピード・分散の内部へ。

詳細 — 1段階ずつ追う

書き込みと一貫性のモデル

キャッシュとDBの食い違いを、どう抑えるか。

  • write-through — 書き込み時にキャッシュとDBを同時更新(一貫だが書きが重い)
  • write-back — 先にキャッシュ、あとでDB(速いが喪失リスク)
  • write-around+cache-aside — 書きはDBへ、読みでキャッシュに載せる(王道)
  • 順序 — 更新は「DB更新→キャッシュ削除」が基本。削除でなく更新にすると競合で古い値が残りやすい

ミスの嵐をどう防ぐ

  1. TTL+ジッタ — 期限を散らし、一斉失効を避ける
  2. single-flight — 同一キーの再計算を1本に集約
  3. stale-while-revalidate — 古い値を返しつつ裏で更新
  4. negative caching — 「無い」という結果も短くキャッシュ(無駄な問い合わせ抑制)

分散とアルゴリズム

  • eviction — LRU/LFU/W-TinyLFU/ARC。ヒット率と実装コストのバランス
  • コンシステントハッシュ — ノード増減で動く鍵を最小化。仮想ノードで平準化
  • near cache — アプリ内の1次キャッシュ+共有の2次キャッシュ(多層)
  • ホットキー — 1つの鍵に集中。複製やローカル化で分散

⚠️ 破れ方

  • スタンピード — 一斉ミスでDB殺到(上の対策で緩和)
  • 整合性の破れ — 更新とキャッシュ削除の競合で古い値が固定される
  • キャッシュ汚染 — 個人向け応答を共有キャッシュへ載せる事故
  • メモリ圧迫 — evictionで必要なものまで押し出される(サイズ設計)

理解度チェック

そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。

1. 期限切れでも古い値をいったん返しつつ、裏側で新しい値へ更新する手法を、英字(ハイフン区切りの語)で答えてください。

2. 人気キーの一斉ミスでDBへ殺到するのを、1件だけ再計算させて防ぐ手法は?

3. 分散キャッシュでノードの増減時に「移動する鍵を最小化」する仕組みは?

4. write-back(遅延書き戻し)方式の説明として正しいのは?

5. 元データ更新時に「キャッシュを上書き更新」ではなく「DB更新→キャッシュ削除」が基本とされるのはなぜ?

6. 「存在しない」という結果も短時間キャッシュする negative caching の主な狙いは?

7. 1つの鍵にアクセスが集中する「ホットキー」への対処として適切なのは?

8. キャッシュ容量が満杯のとき、どの項目を追い出すかを決める処理(LRUやLFUなどの方針)の総称を英単語で答えてください。