更新したのに古い画面が出る。キャッシュが残る仕組み

キャッシュは、よく使うデータを近くに一時保存して表示や処理を速くする仕組みです。

Tatoediaの読者モブ
読者さん疑問

更新したのに古い画面が出るのは、キャッシュのせい?

Tatoediaの案内役
案内役答え

ありえるね。キャッシュは速さのためのコピーだから、元の更新と入れ替わるまで古い内容が残ることがあるんだ。

更新したのに古い画面が出る

ページを直して公開したのに、自分のパソコンでは古いまま。同僚の画面では新しくなっている。こういうとき、まず疑うのがキャッシュです。

キャッシュは、よく使う情報をすぐ取り出せる場所にコピーしておき、待ち時間を減らす仕組みです。倉庫にある書類を毎回取りに行く代わりに、よく使う書類を机の引き出しに入れておく。すぐに仕事を進められますが、倉庫の原本が差し替えられても、引き出しの中のコピーは古いままです。

キャッシュ のイメージ

Webサービスでも、毎回データベースや外部サービスに問い合わせる代わりに、直近の結果を一定時間だけ手元に置いておきます。同じ商品一覧へのアクセスが多いとき、画像やCSSを速く配りたいとき、外部 API の呼び出し回数を減らしたいとき、ダッシュボードの集計結果を少しの間使い回したいとき。画面は速くなり、サーバーの負担も軽くなります。その代わりに、古い画面が出るという現象がついてきます。

コピーはどこに残っているのか

古い画面の原因を探すときは、引き出しがどこにあるかを順に考えます。

  • 閲覧している人のブラウザ。自分の画面だけ古いなら、まずここ
  • 利用者の近くから配信する CDN の拠点。地域や人によって新旧がばらつくなら、ここかもしれない
  • サーバーやアプリの中。Webサーバーやアプリが、データベースへの問い合わせ結果を手元に置いている

どの引き出しに古いコピーが残っているかで、消す方法も、頼む相手も変わります。

いつコピーを捨てるのか

キャッシュは速さのための仕組みで、情報の正しさを保証するものではありません。だから、コピーをいつ捨てるかを作る側が決めておきます。

どのデータを何秒持つか。更新が入ったら、関係するコピーを消す仕組みを用意する。古い情報がどれくらいの間見えていてもよいかを、関係者と合意しておく。価格や在庫のように、古いまま見せると困る情報ほど、保持する時間は短くなります。

効き目は、応答時間と、コピーで返せた割合(ヒット率)で確かめます。速くなっていないなら、持ち方を見直す合図です。