thinkphp 5.0 缓存清理后页面或数据未更新,主因是清除了错误缓存类型:普通数据缓存在 runtime/cache/(php think clear 可清),模板缓存在 runtime/view/(需手动删或用 php think clear:template),请求缓存在 runtime/request_cache/(路由配置 cache() 才启用,不被默认命令清理),字段结构缓存在 runtime/schema/ 或 runtime/temp/(改表后须单独处理)。

缓存清理后页面或数据没变化,大概率不是“没清干净”,而是你清的不是真正起作用的那个缓存位置,或者缓存根本没被重新生成——ThinkPHP 5.0 的缓存体系是分层的,不同模块用不同目录、不同机制,混着清容易白忙。
先确认你清的是哪一类缓存
ThinkPHP 5.0 至少有四类独立缓存,各自路径和触发方式不同:
-
普通数据缓存:默认在
runtime/cache/,由cache()或Cache::get()写入,php think clear能清掉 -
模板编译缓存:存在
runtime/view/,php think clear默认不碰它,必须手动删或用php think clear:template(TP6.1+) -
请求缓存(静态HTML):在
runtime/request_cache/,只在路由配置了->cache()时才启用,php think clear也不清理它 -
数据库字段结构缓存:存于
runtime/schema/或runtime/temp/,改表后不刷新会导致查不到新字段,需单独处理
检查缓存是否真被绕过了
有些“没变”其实是缓存压根没生效,系统直接走了旧逻辑:
- 模板里用了
{include file="$dynamic"},变量名动态拼接 → 模板引擎跳过缓存,每次都重编译 - 请求缓存配置中
params漏写,导致不同参数共用一个缓存文件(比如没限定['id'],?sort=asc和?sort=desc都命中同一份缓存) - 闭包式缓存回调里漏了
return,例如cache('key', function() { $data = db()->find(); });→ 函数没返回值,缓存写入空,下次读到空就继续执行,看起来像“没更新”
验证当前读到的到底是不是缓存内容
别靠“我刚改了模板,应该变了”来判断,直接看实际读取结果:
- 在控制器里加一行:
dump(cache('your_key'));,确认值是否是你预期的新内容 - 打开
runtime/cache/对应文件,用文本编辑器看里面序列化的内容,别信文件修改时间——它可能只是被 touch 过 - 对请求缓存,直接访问
runtime/request_cache/下对应 URL 的 md5 文件,用浏览器打开看是不是旧 HTML
权限与驱动问题常被忽略
缓存写不进去,等于没缓存;缓存写进去了但读不了,等于白写:
-
runtime/cache/目录不可写 →cache()静默失败,后续一直读上一次成功的旧文件 - 用了 Redis 驱动但没配好,或连接超时 → 自动回退到 file 驱动,而你清的是 Redis,file 缓存还在生效
- Windows 环境下
%APPDATA%\Roaming\Composer\Cache权限不足,连带影响runtime/cache初始化,导致所有缓存操作失效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











