thinkphp 文件缓存默认存于 runtime/cache/(单应用)或 runtime/appname/cache/(多应用);清理时应仅删除 cache/ 子目录,避免误删 log/、temp/ 等关键目录。

ThinkPHP 的缓存文件到底存在哪?
默认情况下,ThinkPHP 5.1+ 的文件缓存(File 驱动)会写入 runtime/cache/ 目录;如果项目启用了多应用模式,路径可能是 runtime/appname/cache/。别直接删 runtime/ 整个目录——里面还有日志、模板缓存、路由缓存等,误删可能让应用启动失败或报 Template not found 错误。
实操建议:
- 先确认当前缓存驱动:检查
config/cache.php中的default和对应驱动配置,确保你清的是实际在用的缓存类型 - 只清理
cache/子目录下的内容,保留log/、temp/、route/等其他子目录 - Linux 下可用命令快速清理:
rm -rf runtime/*/cache/*(多应用)或rm -rf runtime/cache/*(单应用)
tp 命令行清除缓存为什么有时不生效?
php think clear 默认只清「模板缓存」和「路由缓存」,不碰 Cache::store('file')->get() 这类手动调用的缓存数据。这是最容易被忽略的点——你以为清完了,其实业务层写的 Cache::remember() 还在硬盘上躺着。
实操建议:
- 加参数强制清所有缓存:
php think clear --all(TP6.0+),但注意它仍不清理自定义缓存实例(如Cache::store('redis')) - 若用了非默认缓存名(比如
Cache::store('my_file')),需单独调用:Cache::store('my_file')->clear() - CLI 环境下
clear命令不会触发think\Cache的自动初始化,某些自定义驱动可能没加载,得先确认驱动已注册
手动调用 Cache::clear() 在控制器里为啥没反应?
常见错误是写了 Cache::clear() 却发现文件还在,原因通常是:缓存驱动配置了 path,但代码里没传进去,导致它去清了默认路径(比如 runtime/cache/),而你实际用的是 runtime/custom_cache/。
实操建议:
- 显式指定 store 名称,避免依赖默认配置:
Cache::store('file')->clear() - 如果配置里改了
path,请确认该配置在运行时已加载(例如没被环境变量覆盖,或没在.env里写错键名) - 清完后立刻用
Cache::has('key')或直接var_dump(file_exists(...))验证,别只信返回值true——有些驱动 clear 成功但底层 unlink 失败也不会抛异常
线上环境不敢随便删 cache/ 怎么安全验证?
最稳妥的方式不是“清”,而是“绕过”:临时把缓存驱动切到 Null,再刷新接口看是否还复现问题。这样既不碰磁盘,又能确认是不是缓存导致的异常。
实操建议:
- 在
config/cache.php里临时改'default' => 'null',或通过环境变量CACHE_DRIVER=null覆盖 - 注意
Null驱动不支持remember()的闭包回调,会直接执行并丢弃结果,所以仅用于排查,不能长期启用 - 如果切
null后问题消失,基本锁定是缓存数据脏了;这时再回到file驱动,有针对性地删掉对应 key 的文件(文件名是 key 的 md5 值,可在cache/下用grep -r "your_key_part" .定位)
缓存路径和驱动绑定关系比看起来更松散,一个配置项写错、一次 CLI 和 Web 请求的环境差异、甚至 opcache 没 reload 都可能导致你以为清了,其实根本没走那条路径。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











