在 Laravel 12 中设置 Redis 作为队列驱动的完整步骤如下:
1. 安装依赖包
确保已安装 Redis PHP 扩展和 Predis 客户端:
# 安装 Redis PHP 扩展 (Ubuntu)
sudo apt-get install php-redis
# 安装 Predis 客户端
composer require predis/predis
2. 配置环境变量
修改 .env
文件:
QUEUE_CONNECTION=redis # 关键设置
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_CLIENT=predis # 或 phpredis (如果安装了扩展)
3. 配置队列连接
修改 config/queue.php
:
'connections' => [
'redis' => [
'driver' => 'redis',
'connection' => 'default', // 使用 config/database.php 中的连接
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90, // 任务超时时间(秒)
'block_for' => 5, // 阻塞等待时间(秒)
'after_commit' => false, // 事务提交后分发
],
],
4. 配置 Redis 连接
确保 config/database.php
中的 Redis 配置正确:
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_DB', 0),
],
],
5. 启动队列 Worker
# 基本启动
php artisan queue:work
# 推荐生产环境参数
php artisan queue:work redis \
--queue=high,default \
--timeout=60 \
--tries=3 \
--sleep=3 \
--max-jobs=100 \
--max-time=3600
6. 使用 Supervisor 守护进程(生产环境必需)
安装 Supervisor:
sudo apt-get install supervisor
创建配置文件 /etc/supervisor/conf.d/laravel-worker.conf
:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/your/project/artisan queue:work redis --sleep=3 --tries=3 --max-jobs=100
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/path/to/your/project/storage/logs/worker.log
stopwaitsecs=3600
启动 Supervisor:
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
7. 测试 Redis 队列
创建测试任务:
php artisan make:job TestRedisJob
修改 app/Jobs/TestRedisJob.php
:
public function handle()
{
\Log::info('Redis job processed: ' . now());
}
分发任务:
// 在控制器中
TestRedisJob::dispatch()->onQueue('default');
8. 监控队列状态
查看队列状态:
php artisan queue:monitor redis:default,high
查看失败任务:
php artisan queue:failed
关键配置说明:
block_for
:减少 Redis CPU 使用(建议值 5-10)retry_after
:必须大于任务最长执行时间--max-jobs
:防止内存泄漏--max-time
:定期重启 worker- Supervisor 的
numprocs
:根据 CPU 核心数设置(建议为核心数×2)
常见问题排查:
-
任务不执行:
- 检查
.env
中的QUEUE_CONNECTION
- 确保 Supervisor 配置正确
- 查看
storage/logs/laravel.log
- 检查
-
任务重复执行:
- 确保
retry_after
大于任务执行时间 - 检查 Redis 连接是否正常
- 确保
-
内存泄漏:
- 添加
--max-jobs
参数 - 使用
php artisan queue:restart
定期重启
- 添加
配置完成后,您的 Laravel 应用将使用 Redis 作为高性能队列驱动,适合处理高并发任务场景。