ThinkPHP 8.0 缓存驱动配置后必须验证Redis真实连通,不能仅凭Cache::set()返回true判断生效;需通过php think tinker执行ping()返回+PONG、cache()函数读写比对、日志搜索“CACHE SET redis”或检查model_cache.php文件及session独立database配置等多方式交叉验证。

ThinkPHP 8.0 缓存驱动配置完成后,不能仅凭 Cache::set() 返回 true 就认为 Redis 已生效,因为连接失败时框架会静默降级为 file 驱动,导致后续 Cache::get() 始终返回 null,而你完全看不到报错。
验证 Redis 连接是否真实通
在项目根目录执行命令行进入交互调试环境:php think tinker。
输入以下代码并回车执行:(new \think\cache\driver\Redis(config('cache.stores.redis')))->handler()->ping()。
若返回 【+PONG】 字符串,说明 Redis 服务可达、认证通过、参数无误;若抛出 RedisException 或 Connection refused,则 host/port/auth/database 中至少有一项填错或服务未运行。
立即学习“PHP免费学习笔记(深入)”;
确认缓存操作是否真走 Redis
方法一:用 cache() 助手函数快速比对
执行 php -r "var_dump(cache('test_verify', 'alive', 10));" → 返回 true 表示写入成功。
再执行 php -r "var_dump(cache('test_verify'));" → 若输出 string(5) "alive",说明读取命中 Redis;若输出 bool(false),说明仍在用 file 驱动,【此时必须回头检查 config/cache.php 中 default 是否为 'redis'(大小写敏感)】。
方法二:查看 runtime/log 下的 debug 日志
在控制器中调用 Cache::set('debug_key', 'hit', 30) 后立即访问该接口,在 runtime/log/ 目录下搜索 “CACHE SET redis” 或 “CACHE GET redis”,有对应日志才表示驱动已接管;若只看到 “CACHE SET file”,说明配置未生效。
检查模型查询缓存是否启动
第一步:执行 php think optimize:schema 命令。
第二步:检查 runtime/cache/model_cache.php 文件是否存在且非空。
第三步:在控制器中插入两行调试语句:dump(Db::getLastSql()); → 紧接着执行带 ->cache(true) 的查询。
若日志中出现 【[CACHE HIT]】 标识,说明模型层缓存已穿透至 Redis;若只有 SQL 输出而无该标识,说明 cache() 调用位置错误或 model_cache.php 根本未生成。
排查 session 缓存是否同步启用
打开 config/session.php,确认存在完整 store 配置块,不能只写 'type' => 'redis'。
执行 php -r "$s = new \think\Session(); $s->init(['type'=>'redis','store'=>['host'=>'127.0.0.1','port'=>6379,'database'=>1]]); var_dump($s->getDriver()->handler()->ping());"。
返回 +PONG 才代表 session 确实连上了 Redis;若此处失败,用户登录后刷新即登出就是必然结果,【cache 和 session 必须使用不同 database,比如 cache=0、session=1】。



















