驗證緩存文件是否會自動刪除的目的是,防止產生大量的緩存文件,占滿磁盤。因為,我最近越來越多的使用 cache 來緩存各類 token。
使用的是 file 作為 CACHE_DRIVER
CACHE_DRIVER=file
首先生成一個 cache
> php artisan tinker >>> cache(['name' => 'zhongwei'], 1); => null >>> echo cache('name'); zhongwei
此時檢索 cache 文件存儲的位置
> grep zhongwei -r storage/framework/cache/data/ storage/framework/cache/data/6a/e9/6ae999552a0d2dca14d62e2bc8b764d377b1dd6c:1542767260s:8:"zhongwei";
1 分鍾之后,再次獲取 cache,已確保 cache 已失效
>>> echo cache('name'); >>> > grep zhongwei -r storage/framework/cache/data/ >
此時,我們會看到 cache 文件也被刪除了。
但是,這並不能證明,cache 文件會被自動清除。於是,我又重復了上面的測試。 但並不主動獲取 cache 的值,即不執行 cache('name')。
結果出來了,果然文件並不會被自動刪除。只有在調用 cache 時,發現時間戳過期,才會被刪除。
結論
- 如果業務類型確實會產生大量 cache 文件,而且復用率極低的話,不要使用 file 作為 CACHE_DRIVER
- Redis 這類會主動做過期回收的 no sql 更適合做 CACHE_DRIVER
- 不得不用 file 時,不要忘了主動清除 cache