ThinkPHP6切换Redis后仍需手动清理旧文件缓存,因框架启动时优先加载runtime/cache/、runtime/route/、runtime/config/等残留文件,导致路由404、配置不生效等问题;必须针对性清除这三类目录,同时谨慎清理Redis缓存。

ThinkPHP6缓存驱动已切换为Redis,但项目里仍存在旧的文件缓存残留,导致页面加载异常、配置未更新或路由解析错误——这不是Redis没生效,而是旧文件缓存还在干扰框架启动流程。
确认当前缓存驱动是否真正生效
第一步:运行php think version确认是TP6.x(非5.1),再执行php think run观察启动日志中是否出现Using cache store: redis字样;
第二步:在控制器里写一行测试代码:dump(Cache::getDriverName());,返回redis才算真正切换成功;
【如果返回file或报错Cache handler not exists: redis,说明配置没生效,此时清Redis毫无意义,必须先修配置】
立即学习“PHP免费学习笔记(深入)”;
为什么改了Redis驱动,还要手动清文件缓存
ThinkPHP6启动时会按顺序加载多层缓存:先读runtime/route/下的路由缓存文件,再读runtime/config/下的配置缓存,最后才用Redis读业务数据;
这些文件缓存不是“自动失效”,它们被硬编码写入磁盘,哪怕你把cache.default改成redis,框架启动时依然会优先加载这些旧文件;
典型症状:改了路由规则却404、改了配置项却不生效、模板路径报错——全是runtime/cache/、runtime/route/、runtime/config/里残留文件惹的祸。
必须清理的三类文件缓存位置
方法一:清空核心运行时缓存目录(最常用)
进入项目根目录,执行:rm -rf runtime/cache/* runtime/route/* runtime/config/* runtime/data/*;
注意:不要删runtime/整个目录,log/和temp/里可能有重要调试日志或临时编译文件;
方法二:针对多应用模式精准清理
如果你启用了多应用(如app/admin/、app/api/),缓存路径实际是runtime/admin/cache/、runtime/api/route/等;
执行:rm -rf runtime/*/cache/* runtime/*/route/* runtime/*/config/*;
方法三:保留日志,只清缓存子目录(生产环境推荐)
逐个检查runtime/下每个子目录,只删除带cache、route、config、data字样的文件夹内容,跳过log/、temp/、swoole/;
这一步不能偷懒——误删log/会导致监控告警失联,误删swoole/会让Swoole Worker进程启动失败。
Redis缓存要不要同步清理
方法1:用think命令一键清(TP6.0+)
执行php think clear --all,它会触发Redis驱动的FLUSHDB操作,同时清runtime下所有缓存目录;
方法2:手动连Redis清理(更安全)
先查config/cache.php里的stores.redis.prefix值,比如是think_cache:,就用redis-cli执行:redis-cli --scan --pattern "think_cache:*" | xargs redis-cli del;
【千万别直接FLUSHDB,除非确认这个Redis实例只给当前项目用】



















