Laravel Cache 的快取檔案在到期後是否會自動刪除
阿新 • • 發佈:2018-12-29
驗證快取檔案是否會自動刪除的目的是,防止產生大量的快取檔案,佔滿磁碟。因為,我最近越來越多的使用 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