直接用 Redis 驱动 Laravel 10 队列需四步:装好 Redis 及扩展、配置环境变量、设置独立 Redis 数据库隔离(如 REDIS_QUEUE_DB=2)、配置 queue.php 使用 queue 连接并合理设置 retry_after(建议 120~180 秒)。

直接用 Redis 驱动 Laravel 10 队列,核心就四步:装好 Redis 和 PHP 扩展、改环境配置、确认队列连接设置、写任务并启动监听。关键不是“能不能跑”,而是“会不会掉任务”——重点在 retry_after 和 Redis 数据库隔离 这两个地方。
确保 Redis 服务和 PHP 扩展就绪
先确认 Redis 服务正在运行(Linux 下执行 sudo systemctl status redis),再检查 PHP 是否能连上:
- 推荐用 Composer 安装 Predis:
composer require predis/predis(无需额外扩展,兼容性好) - 如果已启用 phpredis 扩展,确保
php.ini中有extension=redis,且版本 ≥ 5.3.7 - 测试连通性:
php artisan tinker→ 输入Redis::ping(),返回"PONG"即通
区分 Redis 连接用途,避免缓存与队列混用
别让队列和缓存共用同一个 Redis database,否则可能互相干扰或清空任务。在 .env 中明确拆分:
-
REDIS_DB=0(默认,可留给缓存) REDIS_CACHE_DB=1-
REDIS_QUEUE_DB=2← 队列专用库,后面要对应上
同时在 config/database.php 的 redis.connections 里定义 queue 连接:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
'host' => env('REDIS_QUEUE_HOST', '127.0.0.1'),
'password' => env('REDIS_QUEUE_PASSWORD'),
'port' => env('REDIS_QUEUE_PORT', 6379),
'database' => env('REDIS_QUEUE_DB', 2),
],
配置 queue.php 使用独立 Redis 连接
打开 config/queue.php,修改 connections.redis 段落:
-
'connection' => 'queue'← 对应上面定义的queue连接名,不是default -
'queue' => env('REDIS_QUEUE', 'emails')← 建议按业务命名(如emails、notifications),别用default -
'retry_after' => 120← 至少比最长任务耗时多 20 秒,比如发邮件通常设 120~180 -
'block_for' => null← 保持阻塞监听,减少空轮询
再把 'default' => env('QUEUE_CONNECTION', 'redis') 设为 redis,让系统默认走 Redis 队列。
创建任务、分发与监听
生成一个可队列任务:
php artisan make:job ProcessOrder- 在
handle()方法里写实际逻辑(记得加异常捕获) - 控制器中调用:
ProcessOrder::dispatch($order)->onQueue('emails');(指定队列名) - 延迟执行示例:
ProcessOrder::dispatch($order)->delay(now()->addMinutes(5));
启动监听(开发环境):
php artisan queue:work --queue=emails --tries=3 --timeout=120- 生产环境必须用 Supervisor 管理进程,防止崩溃退出

















