php think clear --all仅清驱动级缓存(runtime/cache/、redis带prefix的key、日志/配置/路由缓存),不清理模型查询缓存、模板编译缓存(需-t)、字段结构缓存(需db::clearcache())、自定义store及标签缓存(依赖驱动支持)。

ThinkPHP 8.0新版本缓存清理和老版本有本质差异:不再默认清模型查询缓存、模板编译缓存、字段结构缓存,也不再自动穿透标签缓存;php think clear --all 只清驱动级缓存,其余必须显式调用或手动操作,否则旧数据照常返回。
php think clear --all 清什么、不清什么
执行 php think clear --all 后,只清除以下三类缓存:
• runtime/cache/ 下所有 PHP 缓存文件(file 驱动)
• Redis/Memcached 中带 prefix 的 key(如 think_:config:*)
• 日志、配置、路由缓存(runtime/log/、runtime/config.php、runtime/route.php)
但【完全不碰】以下四类:
• 模型层 cache(true) 生成的查询缓存(key 形如 think_user_123,不走 prefix,也不进标签系统)
• 模板编译缓存(存于 runtime/view/,必须加 -t 参数才清)
• 字段结构缓存(runtime/schema/ 或 runtime/temp/,需手动调 Db::clearCache())
• 自定义 store 实例(如 Cache::store('my_redis'),除非显式调用 ->clear())
模板缓存必须加 -t 才能清
方法一:命令行强制清理
php think clear -t
这一步必须加 -t,否则 runtime/view/ 目录下的 .php 编译文件原封不动——改了模板却看到旧 HTML,八成是这里卡住。
方法二:手动删目录(开发环境可用)
rm -rf runtime/view/
注意:不要只删某几个 .php 文件,ThinkPHP 8.0 的模板缓存有依赖关系,删一半会导致编译失败报错。
模型查询缓存要单独处理
第一步:确认是否用了模型缓存
查代码里有没有 UserModel::where()->cache(true)->select() 或 $model->cache(3600) 这类调用
第二步:针对性清除
在控制器或命令行中执行 \think\facade\Db::clearCache();
这会清掉 runtime/schema/ 和 runtime/temp/ 里的字段结构缓存,同时触发模型查询缓存失效——因为 TP8 的模型缓存 key 依赖结构哈希值,结构缓存一清,旧查询缓存自动作废。
第三步:验证是否生效
直接访问对应接口,用 Xdebug 或日志打点看 SQL 是否重新执行;别只信返回结果,有些缓存命中后连 PDO::query 都不走。
Redis 标签缓存清理要配对
Cache::tag('user')->clear() 在 Redis 下可能没反应,原因不是代码写错,而是底层配置断链:
• 确认 config/cache.php 中 redis 驱动启用了 'tag_prefix' => 'tp_tag:' —— 没设这个,索引 key(tp_tag:user:*)和真实数据 key(think_user_123)就对不上
• 必须用 file 或 redis 驱动,apc/wincache 调用 tag->clear() 直接静默忽略
• 线上不敢扫 keys?用 scan 替代:redis-cli --scan --pattern "tp_tag:user:*" | xargs -L 1 redis-cli del
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











