ThinkPHP 5 文件缓存需显式配置config/cache.php,type必须小写'File',path须真实存在且可写,prefix建议加业务前缀,expire单位为秒;Cache::clear()不删磁盘文件,需用php think clear --cache或手动递归删除runtime/cache/。

ThinkPHP 5 文件缓存必须显式配置,不能依赖默认值——框架默认不启用任何缓存,config/cache.php 文件不存在或配置不完整,Cache::set() 就会静默失败。
创建并填写 config/cache.php
在项目根目录的 config/ 目录下新建 cache.php 文件(不是改 application/config.php 或其他文件),返回标准数组配置:
- 'type' => 'File':必须小写,写成 'file' 或 'FILE' 均无效
-
'path' => runtime_path() . 'cache/':必需项,路径需真实存在且 Web 进程有写权限;推荐用
runtime_path()动态获取,避免硬编码相对路径(如./runtime/cache在 CLI 下易出错) -
'prefix' => 'app_':建议加业务前缀,防止不同模块共用相同键名导致覆盖(例如用户列表和后台列表都用
'list') - 'expire' => 3600:单位为秒,0 表示永久,但实际仍受系统清理策略影响
验证是否生效
写一段测试代码,放在控制器里执行:
Cache::set('test_key', 'hello_file', 60);-
dump(Cache::get('test_key'));—— 应输出hello_file - 同时检查 runtime/cache/ 目录下是否生成了对应文件(通常按哈希分目录,如
runtime/cache/7d/7d8a...) - 如果返回
null或false,优先确认cache.php是否在正确路径、path目录是否可写、type拼写是否准确
清除文件缓存要注意什么
Cache::clear() 只清内存中已加载的键,不会删除磁盘上的缓存文件,久而久之会堆积大量失效文件:
立即学习“PHP免费学习笔记(深入)”;
- 开发阶段推荐命令行:运行
php think clear --cache(TP5.1.14+ 支持),它会真实递归清空runtime/cache/全部内容 - 手动删时,务必递归删除整个
runtime/cache/目录,不能只删顶层文件(因 File 驱动自动建子目录) - 若用了标签(如
Cache::tag('user')->set()),需用Cache::clear('user')才能精准清除,否则Cache::clear()对带标签的缓存无效
常见踩坑点
多数“缓存不生效”问题其实和驱动无关,而是配置姿势错了:
- 误把配置写进
config/app.php或application/config.php:TP5.0/5.1 只认config/cache.php - 忘记创建
runtime/cache/目录,或权限不足(Linux 下常需chmod -R 755 runtime) - 用
cache('key', $val)助手函数时未初始化就传参,会跳过配置检查直接返回 false;更稳妥写法是先确保配置有效,再调用 - 多模块共用无前缀键名,比如前台和后台都写
Cache::set('config', $data),数据会互相覆盖



















