Redis Queue in Laravel: 处理排队

In Laravel 是 Redis Queue 一个强大的工具,用于处理长时间运行且耗时的任务,而无需等待其完成。 通过使用 Redis Queue,您可以将发送电子邮件、处理后台任务或生成报告等任务排队并异步执行,从而提高应用程序性能并增强用户体验。

Redis Queue 使用的 基本步骤 Laravel

配置 Redis

首先,您需要 Redis 在 Laravel. 确保您已 Redis 通过 Composer 安装了软件包并 Redis 在 .env 文件中配置了连接参数。

CACHE_DRIVER=redis  
REDIS_HOST=127.0.0.1  
REDIS_PASSWORD=null  
REDIS_PORT=6379  

定义工作

接下来,您需要定义要放入队列中的作业。 这些作业将异步执行,并且独立于应用程序的主要处理。

// Example defining a job to send an email  
namespace App\Jobs;  
  
use Illuminate\Bus\Queueable;  
use Illuminate\Contracts\Queue\ShouldQueue;  
use Illuminate\Foundation\Bus\Dispatchable;  
use Illuminate\Queue\InteractsWithQueue;  
use Illuminate\Queue\SerializesModels;  
use Illuminate\Support\Facades\Mail;  
  
class SendEmailJob implements ShouldQueue  
{  
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;  
  
    protected $user;  
  
    public function __construct($user)  
    {  
        $this->user = $user;  
    }  
  
    public function handle()  
    {  
        // Handle sending an email to the user  
        Mail::to($this->user->email)->send(new WelcomeEmail());  
    }  
}  

将作业放入队列

dispatch 当您想要执行一项作业时,只需使用或函数 将其放入队列中即可 dispatchNow

use App\Jobs\SendEmailJob;  
use Illuminate\Support\Facades\Queue;  
  
// Put the job into the queue and perform asynchronously  
Queue::push(new SendEmailJob($user));  
  
// Put the job into the queue and perform synchronously(without waiting)  
Queue::push(new SendEmailJob($user))->dispatchNow();  

处理队列中的作业

将作业放入队列后,您需要设置一个 Worker 来执行队列中的作业。 Laravel 附带一个 artisan command 运行 worker:

php artisan queue:work

将 worker 持续监听并执行队列中的作业。 您可以配置 worker 处理作业的数量以及处理轮次之间的等待时间。

管理队列中的作业

Laravel 提供管理界面,您可以在其中监视和控制队列中的作业。 您可以查看待处理作业的数量、处理时间,甚至重试失败的作业。

 

结论 使用 Redis Queue in Laravel 是处理长时间运行任务的有效方法,而且不会中断应用程序的主要处理。 通过使用 Redis Queue,您可以提高应用程序性能并增强用户体验。