Cache-Asideって何?
最もポピュラーなパターンだよ。①アプリがキャッシュを確認、②キャッシュにあれば返す(ヒット)、③なければDBから取得してキャッシュに保存してから返す(ミス)。Redisと組み合わせるのが典型的。シンプルだけど「キャッシュとDBの不整合」に注意が必要だね
キャッシュが古くなる問題は?
①TTL(Time To Live)で有効期限を設定して期限切れで再取得、②データ更新時にキャッシュを明示的に削除(Cache Invalidation)、③Write-Throughで書き込み時にキャッシュも更新。Phil Karltonの「コンピュータサイエンスの2大難問は、キャッシュの無効化と命名」は本当に正しいよ
TTLの設定目安は?
データの更新頻度と整合性要件で決めるよ。①マスターデータ(商品カテゴリ等):数時間〜1日。②ユーザープロフィール:数分〜数十分。③リアルタイム性が必要(在庫数):数秒〜キャッシュしない。TTLが短いとDBへの問い合わせが増え、長いと古いデータが表示されるトレードオフだね
キャッシュの落とし穴は?
①Cache Stampede(キャッシュ期限切れ時に大量リクエストがDBに殺到)→ロック機構で1つだけDBにアクセスさせる。②Thundering Herd(キャッシュ障害時に全リクエストがDBに集中)→サーキットブレーカーで防ぐ。③キャッシュポイズニング(不正データがキャッシュに入る)→入力バリデーション。キャッシュは「銀の弾丸」ではなく、適切な設計が必要だよ