thinkphp 8.0“静态缓存”实为编译、模板、配置、路由等多层缓存组合,清理不干净主因是仅删runtime/cache;须逐层清理:用php think clear -t清模板、php think clear --temp清编译、php think config:clear+config:cache清配置、php think clear:route清路由、db::clearcache()清字段缓存,并显式调用cache::store('redis')->clear()等清理多驱动。

ThinkPHP 8.0 没有传统意义上的“静态缓存”(如纯 HTML 文件由框架自动生成并长期存放),它所谓的“静态缓存”实际是编译缓存 + 模板缓存 + 配置缓存 + 路由缓存的组合体。所谓“清理不干净”,往往是因为只清了其中一环,而其他层仍在生效。
要真正彻底,得按缓存层级逐项击破,不能只删 runtime/cache。
编译缓存(模板、视图、临时 PHP 文件)
这类缓存位于 runtime/temp/ 和 runtime/view/,是 Twig/ThinkTemplate 编译后的可执行 PHP 文件。
直接删目录最直观:
-
rm -rf runtime/temp/* -
rm -rf runtime/view/*
但更稳妥的是用命令触发框架逻辑清理:
-
php think clear --temp(清 temp) -
php think clear -t(等价于--template,清 view)
注意:php think clear --all 默认不清理 template 和 temp,必须显式加 -t 或 --temp。
配置缓存(runtime/config.php)
这个文件一旦生成,所有 config() 调用都从它读,哪怕你改了 .env 或 config/app.php 也无效。
彻底清理三步:
- 删除
runtime/config.php - 运行
php think config:clear(它会连带清空runtime/config/子目录) - 再执行
php think config:cache重建(仅在APP_DEBUG=false时生效)
别跳过 config:clear —— 它还会重置容器内配置实例,单纯删文件可能残留内存引用。
路由缓存(runtime/cache/route.php)
尤其注解路由更新后,旧 route.php 不删,新 @Route 根本不被扫描。
推荐方式:
-
php think clear:route(精准删除runtime/cache/route.php及关联临时文件) - 若用了注解路由,后续必须补
php think route:cache --annotation - 切记:
APP_DEBUG=true时该文件完全不参与匹配,所以清理前先确认config/app.php和.env中APP_DEBUG=false
模型与查询缓存(易被忽略的关键层)
UserModel::where(...)->cache(true)->select() 产生的缓存不走 Cache 驱动,也不进 runtime/cache/,而是独立存储在 runtime/schema/(字段结构)或 Redis 中无 prefix 的 key(如 think_model_user_list_123)。
清除方法:
- 字段缓存:
\think\facade\Db::clearCache() - 查询缓存(cache(true)):无法批量清,需手动删对应 key;若用了 Redis,可用
redis-cli --scan --pattern "think_model_*"找出后DEL - 更安全做法:开发期禁用
cache(true),改用带明确键名的->cache('user_list_v2', 3600)
多驱动场景下的兜底清理
如果你同时用了 Redis 做数据缓存、File 做模板缓存、Null 做测试缓存:
-
Cache::clear()默认只清当前default驱动,不会清store('redis')或store('file') - 正确写法:
Cache::store('redis')->clear(); Cache::store('file')->clear(); - 线上不敢动 Redis?可临时把
config/cache.php中stores['redis']['host']改成一个不通的地址,让缓存自动降级,比误删 key 更可控。
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











