thinkphp缓存驱动配置后页面仍显示旧数据,说明缓存层未按预期切换或清理,常见于redis等驱动配置看似正确但实际未生效、模板/字段/opcache多级缓存叠加干扰,或清理命令遗漏关键路径。

确认缓存驱动是否真正生效
第一步:执行php think env或在控制器中写dump(config('cache.default'));,验证当前default值是否为'redis'(注意大小写,'Redis'或'REDIS'均无效)。
第二步:检查config/cache.php中stores.redis配置块是否存在且完整——host、port、select(必须是整数,写"0"会静默失败)、password(空字符串也必须显式写'')缺一不可。
第三步:在调试位置插入dump(Cache::get('test_key', function () { return time(); }));,刷新两次。若返回值不变,说明仍在走file驱动;若变化,说明Redis已通但业务缓存键未更新。
清除模板缓存(runtime/view/)
这一步操作起来很简单,直接删目录就行:Linux/macOS下运行rm -rf runtime/view/,Windows下用rd /s /q runtime\view。
注意:【不能只删runtime/view/*.php】——ThinkPHP按模板路径哈希分目录(如runtime/view/5a/3b/template_index_php.php),通配符无法覆盖深层结构,漏删即白清。
开发阶段更省事的做法是关闭模板缓存:在config/template.php中设'cache' => false,TP5.1+完全支持,禁用后每次请求都重新编译源模板。
处理数据库字段缓存不更新
方法一:执行php think clear,该命令会清空runtime/schema/和runtime/temp/下的字段结构缓存文件。
方法二:在数据库配置config/database.php中临时关闭字段缓存:'fields_cache' => false,开发环境推荐此设置,避免改表后反复清缓存。
方法三:代码中主动刷新,修改表结构后立即调用\think\facade\Db::clearCache(),或对单表执行\think\facade\Db::table('user')->getFieldsType()强制重载字段定义。
排查OPcache与Web服务器缓存
如果以上全做了页面还是旧的,立刻检查PHP的OPcache:在php.ini中确认opcache.validate_timestamps=1,否则即使文件已改,OPcache仍返回旧字节码。
Nginx用户重点看fastcgi_cache配置——它会缓存整个HTTP响应,连var_dump()都不执行。临时解决:在Nginx的location ~ \.php$块中加入fastcgi_cache off;并执行nginx -s reload。
浏览器端强制刷新(Ctrl+F5)或访问带时间戳的URL(如/index/index?t=123456),排除本地304缓存干扰。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











