IT-Q

キャッシュの破棄はどうしていましたか。

基本は TTL で自動失効させ、即時反映が要るものだけ更新処理の中で forget を呼びます。更新経路が複数あると破棄漏れが必ず起きるので、破棄はモデル側に寄せるのが安全です。

面接官が見ているのは入れた後のことを考えているか。ここが本当の難所。

これは「キャッシュを入れる対象の判断基準として妥当なのはどれですか。」への追撃質問です。

よくある答えと、面談でどう見られるか

  • 基本は TTL で自動失効させ、即時反映が要るものだけ更新時に forget する
    その通りです。更新経路が複数あると破棄漏れが必ず起きるので、オブザーバに寄せるか TTL で妥協するかを選びます。
  • 更新のたびに Cache::flush() で全消しする
    他の機能のキャッシュまで巻き添えで消えます。共有キャッシュでは特に危険です。
  • 破棄は不要。キャッシュは自動で最新になる
    なりません。そこがキャッシュの一番難しいところです。
  • アプリの再起動時にまとめて破棄する
    デプロイ時の一括破棄は現実的な手ですが、稼働中の更新には追随できません。

面接官は何を見ているか

  • TTL による自動失効に触れた
  • 更新時の明示的な破棄(forget)に触れた
  • 破棄漏れが起きやすいという認識があった

模範解答

基本は TTL を付けて自動で失効させます。多少古くても困らないなら、これが一番安全です。即時反映が必要なものは、更新処理の中で Cache::forget() を呼びます。ただし、更新経路が複数あると破棄漏れが必ず起きるので、モデルのオブザーバに寄せるか、そもそもTTLで妥協するかを選びます。キャッシュは入れるより捨てる方が難しいです。

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。