thinkphp 8.0 中 redis 缓存配置必须在 config/cache.php 和 config/session.php 中显式填写 host、port、database、auth(acl 模式)等全部参数,.env 仅控制开关;cache 与 session 需隔离 database 或 prefix,且须禁用 php session gc,否则连接失败会静默降级为 file 驱动。

ThinkPHP 8.0 使用 Redis 缓存不能只改 .env 就生效,必须在 config/cache.php 中显式填写全部连接参数,否则会静默降级为 file 驱动——这是线上缓存“看起来正常、实则没走 Redis”的最常见原因。
cache.php 必须手动填全 Redis 连接参数
TP8 不从 .env 解析 REDIS_HOST、REDIS_PORT 等字段,这些变量仅作开关用途(如 CACHE_STORE=redis),底层连接仍由 config 文件硬编码控制。
-
config/cache.php中的'stores' => ['redis' => [...]]数组里,'host'、'port'、'database'、'password'(ACL 模式下用'auth')一个都不能缺,留空或注释掉就会 fallback - 不要依赖“默认值”:比如
'database' => 0必须写明,否则 phpredis 扩展可能连错库甚至报错 - 若 Redis 启用 ACL(Redis ≥6.0),
password字段要换成auth,且确认用户有+@all权限,否则SET类命令会静默失败
session.php 同样要配 store 数组,不能只设 type
只写 'type' => 'redis' 而不补 'store' => [],运行时会抛出 Call to a member function setOptions() on null —— 因为 TP8 的 session Redis 驱动要求显式传入 store 配置,不是复用 cache 的配置。
-
config/session.php中必须包含完整'store' => ['host' => '127.0.0.1', 'port' => 6379, 'database' => 1, 'auth' => 'xxx'] - 强烈建议 cache 和 session 分开
database:比如 cache 用database => 0,session 用database => 1,比加prefix更可靠 - 禁用 PHP 原生 session GC:
ini_set('session.gc_probability', 0),否则 Redis 中过期 session 可能被误删,导致用户莫名登出
连接失败不报错,但功能会悄悄降级
TP8 对 Redis 连接失败采取“静默兜底”策略:首次连接异常时记日志(搜 RedisException 或 Connection refused),后续复用连接池失败则完全无提示,直接切到 file 缓存或 file session。
- 现象包括:登录后刷新页面变未登录、缓存
Cache::set()成功但get()返回 null、接口响应时间忽高忽低 - 验证是否真连上 Redis 的最快方式:
php think tinker后执行(new \think\cache\driver\Redis(config('cache.stores.redis')))->handler()->ping(),返回+PONG才算通 - 超时参数别乱设:
'timeout' => 30是建立连接超时,'expire'是缓存默认有效期,二者语义完全不同,混用会导致连接卡死或缓存提前失效
长连接(pconnect)是性能关键,但需匹配运行模式
TP8 默认使用短连接,高并发下 TCP 握手开销会吃掉大量 QPS;启用持久连接可显著提升吞吐,但必须和部署环境对齐。
- FPM 模式下:在
config/cache.php的 redis store 中加'persistent' => true,连接归属 worker 进程,重启 PHP-FPM 才释放 - Swoole 模式下:
'persistent'无效,应配合连接池使用(需自行封装或引入第三方 pool 组件),否则协程间共享连接可能引发状态污染 - 注意:开启
persistent后,select数据库切换行为会变化,务必在每次操作前显式调用$redis->select($db),不能依赖初始化时的默认库
真正难的不是写对那几行配置,而是意识到 TP8 的 cache 和 session 是两套独立连接逻辑,各自要填满参数、各自要隔离空间、各自要处理连接生命周期——漏掉任何一个,都可能让 Redis 在生产环境“假装在线”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











