切换thinkphp缓存驱动至redis后需手动清理旧file缓存文件、redis残留key及模板/路由/字段缓存,并验证redis驱动是否正确加载和写入。

ThinkPHP缓存驱动从file切到redis后,旧的runtime/cache/文件还在,新请求却读不到缓存,页面反复编译、数据库反复查询——这不是配置没生效,而是新驱动根本不会自动清理旧驱动残留的缓存文件。
确认当前生效的缓存驱动
执行php think run或在控制器中打印config('cache.default'),看输出是不是你期望的redis;别信config/cache.php里写的,.env里的CACHE_DRIVER=redis可能被覆盖了。
如果输出仍是file,说明环境变量或配置加载顺序出错,先停在这里改配置,否则所有清理动作都白做。
手动清掉旧file缓存文件
进入项目根目录,运行:rm -rf runtime/cache/*
注意:不要只删runtime/cache/目录本身,要删它里面的所有内容;删空目录后,TP不会再往里写file缓存,但目录结构必须保留,否则框架启动报错。
【重要】删完立刻验证:执行ls runtime/cache/,输出应为空;若仍有.php文件残留,说明有进程正在写入,需先停掉所有PHP-FPM或Swoole服务再删。
清除Redis中残留的旧缓存key
方法一:用TP命令行清当前驱动缓存
执行php think clear --all,它会调用Redis驱动的flushDB()(TP6+)或flushAll()(TP5),清掉所有带think_cache:前缀的key。
方法二:手动进Redis客户端操作
连接Redis后执行:FLUSHDB(仅清当前DB)或FLUSHALL(清全部DB);【注意】线上环境严禁用FLUSHALL,除非确认该Redis实例只跑这一个TP项目。
方法三:按前缀精准清理(推荐)
执行redis-cli --scan --pattern "think_cache:*" | xargs redis-cli del,只删TP生成的缓存key,不碰其他业务数据。
检查模板和路由缓存是否也被旧驱动污染
第一步:清模板缓存
执行php think clear -t,强制删除runtime/view/下所有编译后的PHP模板文件。
第二步:清路由缓存
TP6执行php think route:clear;TP5直接删runtime/route.php。
第三步:清字段结构缓存
在任意控制器里加一行:\think\facade\Db::clearCache();,否则模型层仍可能读取runtime/schema/里旧的表结构缓存。
验证新驱动是否真正接管
在控制器里写:dump(Cache::getDriver());,输出必须是think\cache\driver\Redis类实例,而不是File。
然后执行:Cache::set('test_key', 'test_value', 300);,再立刻用Redis客户端查get think_cache:test_key,能返回"test_value"才算成功。
如果get返回(nil),说明缓存写入失败——检查config/cache.php里stores.redis.host是否填错,或Redis服务根本没起来。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











