ThinkPHP 8.0 关闭缓存需分层处理:模板缓存须设 'TMPL_CACHE_ON' => false + 'compile_time' => false 并清 runtime/temp/;Redis 下 Cache::clear() 无效需确认 store 配置并显式调用 Cache::store('redis')->clear();标签清理失效主因是未配 tag_prefix 或未用 Cache::tag()->set() 写入;彻底禁用需设 cache default 为 null、禁用 Db 查询缓存、移除请求缓存中间件、模板缓存路径设为不可写,并重置 OpCache。

ThinkPHP 8.0 关闭缓存不能只改配置项或设 expire=0,必须分层击破:模板、模型、请求、驱动四类缓存互不干扰,关错一层就仍有旧数据。
模板和编译缓存怎么关才真正生效
模板缓存(TMPL_CACHE_ON)和编译缓存(temp目录)是两回事,关掉前者不等于绕过后者。常见错误是只在 config/template.php 里设 'cache' => false,但 runtime/temp/ 下的 PHP 编译文件还在被加载。
- 必须同时关闭:
'TMPL_CACHE_ON' => false(禁用模板缓存逻辑) +'compile_time' => false(禁用编译时间戳校验) - 手动删掉
runtime/temp/目录比改配置更可靠,尤其开发中频繁改模板时 - 命令行清编译缓存:运行
php think clear --temp,它会清空runtime/temp/并重置编译状态,比单纯删文件更彻底
Redis 驱动下 Cache::clear() 为什么没反应
调了 Cache::clear() 返回 true,但 Redis 里 key 还在——这不是代码问题,是驱动未真正接管清理链路。File 驱动能删文件,Redis 驱动默认不连数据库执行 FLUSHDB。
- 确认当前生效的 store 是 redis:检查
config/cache.php中default值,并验证stores['redis']已完整配置(host/port/database/password/persistent 必填) - 显式调用 store 实例:用
Cache::store('redis')->clear(),避免因容器 fallback 到 Null 或 File 驱动 - 直连 Redis 验证:进
redis-cli执行SELECT 0(对应 config 中 database),再执行KEYS think_*看是否有残留;若无,说明根本没写进去,回头查 cache 配置是否被 .env 覆盖
标签缓存(tag)清不掉的底层原因
Cache::tag('user')->clear() 失效,90% 是因为 Redis 驱动没配 tag_prefix,或者缓存写入时压根没走 tag 流程。
立即学习“PHP免费学习笔记(深入)”;
- 必须在
config/cache.php的 redis store 里声明:'tag_prefix' => 'tp_tag:'(值可自定义,但写入和清除时必须完全一致) - 写缓存时必须用
Cache::tag('user')->set('key', $val, 3600),不能用Cache::set('key', $val, 3600, ['user'])—— 后者在部分场景下不触发索引写入 - File 驱动不支持标签清理:
Cache::tag('user')->clear()在 file 下静默返回 true,实际什么都没删
想彻底禁用所有缓存,最稳的操作路径
不是把所有 expire 设为 0,也不是只关 default 驱动。真正“禁用”意味着让每一层缓存都降级为 noop 或跳过写入。
- 配置层:把
config/cache.php的default改成'null',并确保stores['null']['driver'] = 'null' - 模型层:禁用查询缓存,全局加
\think\facade\Db::disableQueryCache()(如放在中间件或 Base Controller 构造函数) - 请求层:注释或移除
think\middleware\CheckRequestCache,否则 GET 请求仍会被自动缓存响应 - 模板层:除了
TMPL_CACHE_ON,还要确保config/view.php中'cache_path'指向一个不可写目录,强制每次重新编译
最后别忘了:OpCache 可能锁住你刚改过的配置文件,清完缓存后如果 config() 还返回旧值,先执行 opcache_reset() 或重启 PHP-FPM。



















