キャッシュはどこに置き、どう消しますか

ブラウザ、CDN、アプリ、DB の手前、と層で置き場を考え、期限、更新のときの削除、URL の版の 3 つで古い値を消す、と答える問い。キャッシュしてはいけない物まで話します。

答えてみる

面接官に「キャッシュはどこに置き、どう消しますか」と聞かれたつもりで、答えを見る前に自分の言葉で答えます。

声に出して答えた人は「書かずに答えを見る」で開けます。

解説を読む

聞かれ方から関連するコースまで、この問いの解説を全部ここに置いています。

こう聞かれます

  • 「キャッシュはどこに置き、どう消しますか」
  • 「記事を直したのに、古い内容が表示され続けます。何を疑いますか」
  • 「キャッシュしてはいけない物はありますか」

面接官が見ている点

  • キャッシュの置き場を、利用者に近い所から層で並べられるか
  • 古い値を消す方法を、いくつか持っているか
  • 古い値を返して困る物を見分け、そこには使わない判断ができるか

短い答え

  • 利用者に近い順に、ブラウザ、CDN、アプリの中や横の置き場、DB の手前、と層で考え、データごとにどこまで持たせるかを決めます。
  • 消し方は、期限 (TTL) で自然に切らす、更新したときに明示的に消す、URL に版の印を付けて別物にする、の 3 つを使い分けます。
  • 残高や在庫のように古い値を返すと困る物は、キャッシュしないか、ごく短い期限にとどめます。

少し詳しい答え

層で置き場を考える

  • ブラウザ 利用者の端末に持たせます。いちばん速いですが、こちらから消しにくい置き場です
  • CDN 世界中の配信の拠点に写しを置き、近い拠点から返します。Cloudflare、AWS の CloudFront、Google Cloud の Cloud CDN などです
  • アプリの中や横の置き場よく読む DB の結果や外の API の答えを、メモリや Redis のような速い置き場に持ちます。AWS の ElastiCache、Google Cloud の Memorystore、Cloudflare の KV などがこの役に使われます
  • DB の手前読み取り専用の写し (リードレプリカ) や、集計を前もって作っておく表も、広い意味のキャッシュです

利用者に近いほど速く、元のサーバーの負担も減りますが、そのぶん古い値を消しにくくなります。

3 つの消し方

ブラウザや CDN には、HTTP の応答の見出し (ヘッダー) でどれだけ持ってよいかを伝えます。

http

Cache-Control: public, max-age=31536000, immutable
Cache-Control: private, no-store

1 行目は、ファイル名に版の印 (中身から作った文字列) を付けた画像や CSS 用です。中身が変わればファイル名も変わるので、古い物は誰も読まなくなり、長く持たせても困りません。2 行目は、本人だけの画面など、どこにも保存させたくない応答用です。

  • 期限 (TTL) 何秒持ってよいかを決め、過ぎたら取り直させます。単純ですが、期限までは古い値が出ます
  • 更新したときに消す記事を直したら、その記事のキャッシュを消す (CDN なら消す指示を送る) ようにします。すぐ反映されますが、消し忘れる道があると古いまま残ります
  • URL に版の印を付ける 上の 1 行目のやり方です。消す必要がそもそも無くなります

キャッシュしない物 (トレードオフ)

キャッシュは速さと引き換えに、古い値を返すおそれを抱えます。残高、在庫、権限、支払いの状態のように、古い値で判断すると実害が出る物は、キャッシュしないか、ごく短い期限にします。ログインした人ごとに違う画面を CDN に持たせると、別の人の画面が出る事故にもつながります。

期限が切れた瞬間に大勢が同時に元のサーバーへ取りに行き、DB が詰まることもあります。期限を少しずつずらす、1 人だけが取りに行き残りは待つ、などの手当てがあります。キャッシュを足す前に、遅い原因 (DB の問い合わせなど) を直せないかも先に見ます。

話すときは、自分が関わったサービスで、何をどこにどれくらい持たせ、どう消したかの例を 1 つ用意します。

よくある間違い

  • 全部に長い期限を付ける直した内容が出ない、と言われます。変わる頻度と、古くて困るかどうかで期限を分けます
  • 人ごとに違う画面を共有のキャッシュに置く別の人の情報が見える事故になります。本人だけの応答は private か no-store にします
  • 残高や在庫をキャッシュから返す古い値で売りすぎや使いすぎが起きます

深掘りの問い

  • 「キャッシュがどれだけ効いているかは、どう測りますか」当たった割合 (ヒット率) と、元のサーバーへの要求の数や遅さを、足す前と後で比べる、と答えます
  • 「DB を直したのにキャッシュに古い値が残る、を防ぐには」 書き込みの処理の中で同じキーを消す、または期限を短くする、と答え、両方が失敗したときの扱いも決める、と添えます
  • 「CDN に置いた画像を急いで差し替えたいときは」 CDN に消す指示を送るか、ファイル名を変えて新しい URL にする、と答えます

確認日 2026年10月24日

技術面接問題の一覧へ戻る