ThinkPHP 8.1 缓存清理不彻底的常见表现是配置、路由或模板修改后页面仍显示旧内容,根源在于多层缓存(配置、路由、模板、字段、OPcache)叠加生效,需按类型识别、分步清除:先确认APP_DEBUG=false才启用对应缓存,再执行php think clear:config && clear:route && clear:template,接着重建config:cache和route:cache,最后验证文件更新并重启PHP-FPM清除OPcache。

ThinkPHP 8.1 缓存清理不彻底,常见表现是改了配置、路由或模板,页面还是旧的——不是代码没改对,而是多种缓存层叠生效,只清一层根本不管用。关键要分清类型、按顺序操作,不能只删文件或只跑命令。
先确认当前生效的是哪种缓存
不同缓存触发条件不同,盲目清理效率低:
-
配置缓存:仅在
APP_DEBUG = false时由php think config:cache生成runtime/config.php;若config('app.debug')输出true,该缓存完全不启用 -
路由缓存:依赖
runtime/route.php,但前提是APP_DEBUG = false且未被手动绕过;php think clear:route才真正清空关联临时文件,rm -f runtime/route.php可能残留锁或索引 -
模板缓存:路径由
template.template_cache_path决定,不是所有项目都落在runtime/template/;用var_dump(config('template.template_cache_path'))确认真实位置 -
数据库字段缓存:默认存于
runtime/schema/或runtime/temp/下的 PHP 文件,php think clear会一并清除,也可单独调用\think\facade\Db::clearCache()
三步串联清理法(推荐用于部署后)
单一命令无法覆盖全部缓存链路,必须按依赖顺序执行:
- 第一步:清空运行时缓存基础层
php think clear:config && php think clear:route && php think clear:template - 第二步:强制重建关键缓存文件
php think config:cache && php think route:cache --annotation(如用注解路由) - 第三步:验证缓存是否真正更新
检查runtime/config.php文件大小(正常应 ≥30KB)、runtime/route.php修改时间、以及runtime/template/下是否有新生成的哈希命名文件
别忽略 PHP 层的“隐形锁”:OPcache
即使框架缓存全清、文件已更新,config() 还返回旧值?大概率是 OPcache 把旧的 config/app.php 或 runtime/config.php 缓存在内存里了:
立即学习“PHP免费学习笔记(深入)”;
- 确认
opcache.file_exclude已配置排除 runtime 目录,例如:opcache.file_exclude=".*runtime.*" - 重启 PHP-FPM(非 reload):
sudo systemctl restart php8.1-fpm(版本号按实际调整) - 若用 Docker,需重建容器或在容器内执行
opcache_reset()
开发阶段更省心的做法
不想反复清理?开发时直接规避缓存依赖:
- 把
config/app.php中的'debug' => true设为true,框架跳过所有缓存,每次请求重读源文件 - 模板缓存关掉:
'template' => ['cache' => false] - 数据库字段缓存关掉:
'fields_cache' => false(仅限开发环境) - 上线前再统一开启并执行完整清理链,避免遗漏



















