ai生成的php缓存不生效,关键在机制未对齐:先确认redis是否真启用(dump(cache::getdrivername())必须返回redis),再按前缀(如think_cache:*)精准清redis键,同步手动清理runtime/route/、runtime/config/、runtime/cache/残留文件,并排查opcache、nginx缓存等拦截层。

AI生成的PHP缓存不生效,通常不是AI写错了代码,而是缓存机制本身没对齐——Redis键没清对、前缀不匹配、驱动未生效,或根本没走到Redis层。重点不在“怎么写”,而在“怎么查”。
先确认Redis是不是真在用
很多项目改了cache.php配置,但框架压根没加载新设置:
- 执行
php think version确保是TP6.x;再运行php think run,看启动日志是否出现Using cache store: redis - 在控制器里加一行:
dump(Cache::getDriverName());,输出必须是redis,否则clear:cache命令只清文件缓存,和Redis无关 - 如果返回
file或报错Cache handler not exists: redis,说明Redis扩展未启用、配置路径错误,或stores.redis.host等连接参数填错了
清Redis键要清对前缀,不能只靠命令
php think clear:cache默认只清当前default驱动,且对Redis仅调用FLUSHDB——这会清空整个DB,但前提是:
- 你用的是
redis作为default驱动(不是redis_tag或redis_session等自定义store) - Redis配置里的
prefix值(如'think_cache:')和实际写入的key一致;否则FLUSHDB会误清其他项目数据,或漏掉带前缀的键 - 更稳妥的做法是手动验证:用
redis-cli -a yourpass连上后,执行keys "think_cache:*",确认有残留键;再执行del逐个删,或eval "return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 "think_cache:*"批量删(云Redis禁用KEYS时需改用SCAN)
别忘了文件缓存还在“抢跑”
即使Redis已启用,ThinkPHP6启动时仍会优先加载runtime/route/、runtime/config/、runtime/cache/下的旧文件——它们不走Redis,直接导致路由404、配置不生效、接口返回旧数据:
- 必须手动清这三类目录:
rm -rf runtime/route/* runtime/config/* runtime/cache/* - 多应用模式下(如
app/api/),路径是runtime/api/route/等,得用rm -rf runtime/*/route/* runtime/*/config/* - 注意:不要删
runtime/log/或runtime/swoole/,否则丢日志或Swoole进程起不来
检查是否被其他缓存层拦截了
你以为清了Redis就万事大吉?可能请求根本没到PHP:
- OPCache:改了PHP文件但页面没更新?检查
opcache.enable=1且opcache.validate_timestamps=0——开发环境务必设为1,或调用opcache_reset() - Nginx FastCGI缓存:配置里若有
fastcgi_cache,清Redis毫无意义;临时注释掉相关块,执行nginx -s reload - CDN或浏览器缓存:接口返回旧数据,先看响应头有没有
Cache-Control或ETag,加时间戳参数(如?t=123)绕过测试
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











