IT-Q

関連するキャッシュをまとめて消したくてタグを使おうとしたら、file ドライバでは使えませんでした。どうしますか。

選択肢は2つです。redis を入れてタグを使えるようにするか、タグを使わない設計に変えるか。後者はキーにバージョン番号を含め、上げれば古いキーが参照されなくなる形にします。

面接官が見ているのは制約にぶつかった時の判断力。

これは「キャッシュの破棄はどうしていましたか。」への追撃質問です。

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

  • redis を導入するか、キーにバージョン番号を含めて命名規則で一括破棄を代替する
    その通りです。バージョンを上げれば古いキーは参照されなくなり、実質的な一括破棄になります。インフラを増やす判断が重いなら後者から検討します。
  • Cache::flush() で全消しする
    他機能を巻き添えにします。タグを使いたかった理由と矛盾します。
  • database ドライバに切り替えればタグが使える
    database も非対応です。公式ドキュメントの記載は「file・dynamodb・database ではタグはサポートされない」。しかも database は Laravel の既定ドライバなので、何もしていない環境でもタグは使えません。
  • キャッシュをやめて毎回DBを引く
    判断としてはあり得ます。ただし「なぜキャッシュを入れたか」を捨てる決断なので、効果を測ってからにします。

面接官は何を見ているか

  • タグが redis / memcached 限定だと理解した
  • ドライバを変えるか、設計を変えるかの二択を提示できた
  • キー命名規則で代替する案を出せた

模範解答

選択肢は2つです。redis を入れてタグを使えるようにするか、タグを使わずに済む設計に変えるか。後者なら、キーに接頭辞を付けて命名規則で管理し、まとめて消したい単位ごとにバージョン番号をキーに含めます。バージョンを上げれば古いキーは参照されなくなり、実質的な一括破棄になります。インフラを増やす判断が重いなら、後者から検討します。