队列概念与驱动
了解异步处理,并配置数据库或 Redis 队列驱动。
队列概念与驱动 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
什么是队列?
队列可以将缓慢或消耗大量资源的任务(发送电子邮件、调整图像大小、调用外部 API)交给后台工作进程处理,从而让 HTTP 响应保持快速。
队列架构
主进程(Web 服务器)将任务推送到队列中。独立的工作进程会异步拉取并执行任务。
可用的队列驱动
Laravel 支持多个队列后端:
database— 将任务存储在数据库中(适合入门)redis— 快速,适合生产环境sqs— AWS Simple Queue Servicebeanstalkd— 快速、轻量sync— 立即运行(本地开发)
配置队列驱动
在 .env 中设置驱动。
# .env
QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379数据库驱动设置
如果使用数据库驱动,请创建任务表。
$ php artisan queue:table
$ php artisan migrate启动队列工作进程
工作进程会从队列中拉取并执行任务。
$ php artisan queue:work
# Or specify connection and queue:
$ php artisan queue:work redis --queue=emails,defaultqueue:listen 与 queue:work
queue:work 会加载一次应用,并在内存中处理任务,速度更快,但代码更改后需要重启工作进程。queue:listen 会为每个任务重新加载应用,更适合开发。
失败的任务
任务在所有重试都失败后,会存储在 failed_jobs 表中。使用 Artisan 查看并重试任务。
$ php artisan queue:failed
$ php artisan queue:retry all
$ php artisan queue:flush队列优先级
定义多个命名队列,并在启动工作进程时分配优先级。
$ php artisan queue:work --queue=high,default,low
# Worker checks high first, then default, then lowHorizon 控制面板
对于 Redis 队列,Laravel Horizon 提供美观的实时控制面板,用于显示吞吐量、失败的任务和工作进程统计信息。
选择驱动
本地使用 sync,小型项目使用 database,生产环境扩展使用 redis。除非您已经在 AWS 中运行并需要无限扩展能力,否则应避免使用 SQS。
总结
队列会将缓慢的工作转交给后台工作进程。在 .env 中配置驱动,使用 Artisan 创建任务,并使用 queue:work 启动工作进程。在 failed_jobs 表中监控失败的任务。
快速检查
哪个队列驱动会在同一进程中立即运行任务?
常见问题解答
「队列概念与驱动」课时是免费的吗?
是的 — 「队列概念与驱动」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「队列概念与驱动」这节课中我会学到什么?
了解异步处理,并配置数据库或 Redis 队列驱动。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「队列概念与驱动」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。