バックエンド・API・データ · 上級
キャッシュ:古いデータを提供せずに高速化する
一行でいうと: キャッシュを追加する前に、古いデータがどれくらいの時間許容されるかを決める——それが本当に重要な唯一の質問だ。
どこに置くか
ブラウザ、配信ネットワーク、アプリサーバー、共有キーバリューストア。各レイヤーは速くなり、無効化が難しくなる。痛みのほとんどは一つのポリシーなしに積み重なったレイヤーから来る。
三つの戦略
時間の期限切れ。シンプルで大部分に十分。変化するデータには短い時間、安定したデータには論理的な時間を選ぶ。
イベントによる無効化。書き込み時にキーを削除する。より正確で、書き込むすべての場所を覚えることが必要。
バックグラウンド更新。既存のコピーを提供し並行して更新する——わずかに古い値と引き換えのスムーズな体験。
落とし穴
ユーザーのアイデンティティや権限を含まないキャッシュキー——一人のデータが別の人に提供される。同時に大量の期限切れでデータベースを落とす。そして遅いクエリを修正する代わりにカバーするキャッシュ。
さらに深く
キャッシュヒット率とそれなしの応答時間を測定する。問題を解決する代わりに隠すキャッシュは最悪の瞬間に爆発する——空になったとき、システムはそれに対して一度もテストされていない完全な負荷にさらされる。