ThinkPHP 8.0 队列必须显式配置 Redis 全参数于 config/queue.php,漏填 host/port/database/password/retry_after 等任一项将静默降级为 sync 驱动,导致任务同步执行而非入队;需设 'default' => 'redis',并用 ping 验证连接真实生效。

ThinkPHP 8.0 配置队列驱动参数,核心是确保 config/queue.php 中的 redis 驱动配置完整、准确,且与实际 Redis 实例严格匹配。漏填任一关键项,队列将静默降级为 sync(同步执行),导致任务不入队、无积压但业务卡顿——这是线上最隐蔽的故障根源。
必须显式填写全部 Redis 连接参数
TP8 不读取 .env 中的 REDIS_HOST 等变量,所有参数必须硬编码在 config/queue.php 的 stores['redis'] 数组中:
-
host:字符串,如
'127.0.0.1',不可为空或注释掉 -
port:整型,如
6379,写成'6379'会连接失败 -
database:整型,如
2,推荐专库专用(例如缓存用 0,队列用 2) -
password 或 auth:Redis ≥6.0 启用 ACL 时用
auth,并确认用户有+@all权限;传统模式用password -
timeout:建议 float 类型,如
3.0,避免连接阻塞 -
retry_after:任务失败后重试前等待秒数,如
60(默认 60) -
block_for:消费者轮询间隔,如
5(单位秒,降低空转开销)
确认 default 驱动已指向 redis
检查 config/queue.php 顶部的 'default' => 'redis' 是否生效,并确保 'connections' 下的 'redis' 配置块被正确引用。若仍为 'default' => 'sync',所有 Queue::push() 调用都只是同步执行,不会写入 Redis。
验证方式:执行 php think queue:status,输出应显示类似 Connection: redis;若显示 sync 或报错,说明驱动未切换成功。
Redis 实例需与缓存、Session 物理隔离
不要复用 cache 或 session 的 database,避免命令冲突或 key 污染:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 队列推荐固定使用
database => 2 - 缓存用
database => 0 - Session 用
database => 1
同时,在 config/session.php 和 config/cache.php 中,各自独立配置对应 database,不可共用同一份 store 数组。
验证连接是否真实生效
最快验证方法:运行 php think tinker,然后执行:
(new \think\queue\connector\Redis(config('queue.connections.redis')))->connect()->ping()返回 +PONG 表示连通;返回 false 或异常,则配置有误或网络不通。注意:连接失败时 TP8 不报致命错误,而是自动 fallback 到 sync 驱动,必须主动验证。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










