キャッシュの破棄はどうしていましたか。
基本は TTL で自動失効させ、即時反映が要るものだけ更新処理の中で forget を呼びます。更新経路が複数あると破棄漏れが必ず起きるので、破棄はモデル側に寄せるのが安全です。
面接官が見ているのは入れた後のことを考えているか。ここが本当の難所。
これは「キャッシュを入れる対象の判断基準として妥当なのはどれですか。」への追撃質問です。
よくある答えと、面談でどう見られるか
- 基本は TTL で自動失効させ、即時反映が要るものだけ更新時に forget する
その通りです。更新経路が複数あると破棄漏れが必ず起きるので、オブザーバに寄せるか TTL で妥協するかを選びます。 - 更新のたびに Cache::flush() で全消しする
他の機能のキャッシュまで巻き添えで消えます。共有キャッシュでは特に危険です。 - 破棄は不要。キャッシュは自動で最新になる
なりません。そこがキャッシュの一番難しいところです。 - アプリの再起動時にまとめて破棄する
デプロイ時の一括破棄は現実的な手ですが、稼働中の更新には追随できません。
面接官は何を見ているか
- TTL による自動失効に触れた
- 更新時の明示的な破棄(forget)に触れた
- 破棄漏れが起きやすいという認識があった
模範解答
基本は TTL を付けて自動で失効させます。多少古くても困らないなら、これが一番安全です。即時反映が必要なものは、更新処理の中で Cache::forget() を呼びます。ただし、更新経路が複数あると破棄漏れが必ず起きるので、モデルのオブザーバに寄せるか、そもそもTTLで妥協するかを選びます。キャッシュは入れるより捨てる方が難しいです。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。