缓存系统--使用文件缓存怎么删除文件夹和设置过期时间?

laravel 版本:6.20.22
php 版本:7.3.4
使用file当文件驱动时,调用forget方法清除缓存时,只会删除缓存文件,并不会删除生成的文件夹(如附图所示),并且设置过期时间也是无效的,请问有什么办法是可以将文件夹一块删除吗,过期时间是对文件缓存就是无效的吗?
Cache::store(‘file’)->put(‘test’, ‘test’,60);
Cache::store(‘file’)->forget(“test”)

Laravel

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
laravel_peng
最佳答案
  1. 使用 file 当文件驱动时,调用 forget 方法清除缓存时,只会删除缓存文件,并不会删除生成的文件夹(如附图所示)。

file

# 1. 设置缓存 test
Cache::store(‘file’)->put('test', 'test',60);
# 2. 删除缓存,经测试,forget() 确实只会删除缓存文件,不会对其上一层文件夹进行删除。
Cache::store('file')->forget("test")
  1. 请问有什么办法是可以将文件夹一块删除吗?
# 当然有!!
# 1. 设置缓存 test
Cache::store('file')->put('test', 'test',60);
# 2.删除缓存,连带其文件夹。
Cache::store('file')->flush();

file

  1. 并且设置过期时间也是无效的,过期时间是对文件缓存就是无效的吗?
# 设置过期时间是有效的,缓存文件内容如下:
# 1650264074 为结束时间,s:4:"test" 为缓存内容。
1650264074s:4:"test";

# 但是会出现这种情况,当前时间已经大于缓存的结束时间,缓存文件还未被删除。
# 这是缓存的 ”懒删除“ 策略,只有在获取缓存的时候进行删除,并返回 null。
2年前 评论
讨论数量: 5
  1. 过期时间是对文件缓存是有效的
  2. 只有使用清除整个缓存 Cache::flush() 时才会删除目录
2年前 评论
king-wang (楼主) 2年前

@king-wang 你是在学习怎么使用缓存,还是在学习文件缓存的实现原理?

即便是文件缓存也是你设置几秒过期就是几秒过期,不要总纠结文件是否存在。

如果是要学习实现原理可以看下源码 Illuminate\Cache\FileStore

2年前 评论
king-wang (楼主) 2年前
laravel_peng
  1. 使用 file 当文件驱动时,调用 forget 方法清除缓存时,只会删除缓存文件,并不会删除生成的文件夹(如附图所示)。

file

# 1. 设置缓存 test
Cache::store(‘file’)->put('test', 'test',60);
# 2. 删除缓存,经测试,forget() 确实只会删除缓存文件,不会对其上一层文件夹进行删除。
Cache::store('file')->forget("test")
  1. 请问有什么办法是可以将文件夹一块删除吗?
# 当然有!!
# 1. 设置缓存 test
Cache::store('file')->put('test', 'test',60);
# 2.删除缓存,连带其文件夹。
Cache::store('file')->flush();

file

  1. 并且设置过期时间也是无效的,过期时间是对文件缓存就是无效的吗?
# 设置过期时间是有效的,缓存文件内容如下:
# 1650264074 为结束时间,s:4:"test" 为缓存内容。
1650264074s:4:"test";

# 但是会出现这种情况,当前时间已经大于缓存的结束时间,缓存文件还未被删除。
# 这是缓存的 ”懒删除“ 策略,只有在获取缓存的时候进行删除,并返回 null。
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!