这里是文章模块栏目内容页
thinkphp的Cache缓存file类型过期了会主动清除文件吗

验证缓存文件是否会自动删除的目的是,防止产生大量的缓存文件,占满磁盘。因为,我最近越来越多的使用 cache 来缓存各类 token

使用的是 file 作为 CACHE_DRIVER

   return [
    // 默认缓存驱动
    'default' => env('cache.driver', 'file'),

    // 缓存连接方式配置
    'stores'  => [
        'file' => [
            // 驱动方式
            'type'       => 'File',
            // 缓存保存目录
            'path'       => '',
            // 缓存前缀
            'prefix'     => '',
            // 缓存有效期 0表示永久缓存
            'expire'     => 0,
            // 缓存标签前缀
            'tag_prefix' => 'tag:',
            // 序列化机制 例如 ['serialize', 'unserialize']
            'serialize'  => [],
        ],
        // 更多的缓存连接
    ],
];

首先生成一个 cache

 Cache::set('cachename', 'this is a token', 300);
 //设置缓存 cachename 保存300秒过期。

此时检索 cache 文件存储的位置

 在文件系统查看 缓存文件/runtime/cache/03/9898340923cmddydlqo9.php 
 发现 过了300秒,文件依旧存在。

1 分钟之后,再次获取 cache,已确保 cache 已失效

//通过
Cache::get('cachename');
确实得不到缓存内容,表示失效了。

此时,我们会看到 cache 文件也被删除了。

但是,这并不能证明,cache 文件会被自动清除。于是,我又重复了上面的测试。 但并不主动获取 cache 的值,即不执行 cache('name')。

结果出来了,果然文件并不会被自动删除。只有在调用 cache 时,发现时间戳过期,才会被删除。

结论

  • 如果业务类型确实会产生大量 cache 文件,而且复用率极低的话,不要使用 file 作为 CACHE_DRIVER

  • Redis 这类会主动做过期回收的 no sql 更适合做 CACHE_DRIVER

  • 不得不用 file 时,不要忘了主动清除 cache


好了,本文内容全部结束,感谢您的阅读,希望对您有所帮助。