必须先清静态缓存再清动态缓存,否则旧HTML文件会持续命中并覆盖最新逻辑;第一步执行php think clear:html(TP6.1+)或手动删除runtime/html/全部内容,第二步用php think clear --all或按驱动精准清除,第三步显式调用Cache::tag('xxx')->clear()处理标签缓存。

ThinkPHP静态缓存和动态缓存清理顺序安排不当,会导致页面仍显示旧HTML文件而数据已更新,或新数据被旧模板渲染出错——必须先清静态缓存再清动态缓存,否则静态文件会持续命中并覆盖最新逻辑。
确认当前启用的缓存类型
打开 config/app.php 或环境配置文件,检查 【'html_cache_on' => true】 是否开启;同时查看 config/cache.php 中 default 驱动类型,确认是否启用 file/redis 等动态缓存。若两者都启用,才需执行完整清理顺序;只开其一可跳过对应步骤。
静态缓存路径由 HTML_PATH 配置决定,默认为 runtime/html/;动态缓存路径取决于驱动:file 驱动走 runtime/cache/,redis 则在 Redis 实例中按前缀(如 think_cache:*)存储。
第一步:强制删除静态缓存文件
进入项目根目录,执行:
php think clear:html
立即学习“PHP免费学习笔记(深入)”;
该命令专清 runtime/html/ 下所有 .html 文件,不删目录结构,避免误伤其他子目录。若命令不存在(如 TP5),直接手动删除 runtime/html/ 全部内容——【切勿只删部分文件,残留任意一个 html 页都会继续被 Nginx/Apache 直接返回】。
注意:TP6.1+ 支持此命令;TP5 无内置指令,必须用 rm -rf runtime/html/* 或 Windows 下 del /q runtime\html\*.*。
第二步:清除动态缓存数据
方法一:命令行全量清除(推荐开发环境)
php think clear --all
该命令会清空 runtime/cache/、runtime/log/、runtime/session/、runtime/trace/、runtime/view/、runtime/route.php 全部内容,覆盖所有 file 驱动缓存及模板、路由等编译产物。
方法二:按驱动精准清除(生产环境首选)
若配置为 redis 驱动,运行:
php think cache:clear --type=redis
这一步仅操作 Redis,不会碰 runtime 目录下的任何文件,适合高并发场景下规避文件锁风险。但必须确保 redis 配置中设置了正确的 tag_prefix,否则 Cache::tag()->clear() 类操作会失效。
方法三:代码中触发清除(控制器或命令类内)
use think\facade\Cache;
Cache::clear();
该调用只清当前缓存驱动中的键值,对 runtime/html/ 静态文件完全无影响——所以它只能放在第二步,绝不能替代第一步。
第三步:处理标签缓存(如有使用)
① 先判断是否用了 Cache::tag('xxx')->set() 写入缓存。若没用标签,跳过本步。
② 执行对应标签清除:
Cache::tag('user')->clear();
Cache::tag('article')->clear();
标签缓存必须显式清除,因为普通 Cache::clear() 不会扫描标签索引表。如果标签名含变量(如 user_123),必须知道具体标签名才能清除,无法模糊匹配。
③ 若 Redis 中未配置 tag_prefix,或驱动不支持(如 apc),此步调用将静默失败——此时需直连 Redis 执行 scan + del 清理底层 key。



















