更新したのに古い画面が出る
ページを直して公開したのに、自分のパソコンでは古いまま。同僚の画面では新しくなっている。こういうとき、まず疑うのがキャッシュです。
キャッシュは、よく使う情報をすぐ取り出せる場所にコピーしておき、待ち時間を減らす仕組みです。倉庫にある書類を毎回取りに行く代わりに、よく使う書類を机の引き出しに入れておく。すぐに仕事を進められますが、倉庫の原本が差し替えられても、引き出しの中のコピーは古いままです。
Webサービスでも、毎回データベースや外部サービスに問い合わせる代わりに、直近の結果を一定時間だけ手元に置いておきます。同じ商品一覧へのアクセスが多いとき、画像やCSSを速く配りたいとき、外部 API の呼び出し回数を減らしたいとき、ダッシュボードの集計結果を少しの間使い回したいとき。画面は速くなり、サーバーの負担も軽くなります。その代わりに、古い画面が出るという現象がついてきます。
コピーはどこに残っているのか
古い画面の原因を探すときは、引き出しがどこにあるかを順に考えます。
- 閲覧している人のブラウザ。自分の画面だけ古いなら、まずここ
- 利用者の近くから配信する CDN の拠点。地域や人によって新旧がばらつくなら、ここかもしれない
- サーバーやアプリの中。Webサーバーやアプリが、データベースへの問い合わせ結果を手元に置いている
どの引き出しに古いコピーが残っているかで、消す方法も、頼む相手も変わります。
いつコピーを捨てるのか
キャッシュは速さのための仕組みで、情報の正しさを保証するものではありません。だから、コピーをいつ捨てるかを作る側が決めておきます。
どのデータを何秒持つか。更新が入ったら、関係するコピーを消す仕組みを用意する。古い情報がどれくらいの間見えていてもよいかを、関係者と合意しておく。価格や在庫のように、古いまま見せると困る情報ほど、保持する時間は短くなります。
効き目は、応答時間と、コピーで返せた割合(ヒット率)で確かめます。速くなっていないなら、持ち方を見直す合図です。