Laravel7中Redis队列的使用
一、配置文件
首先我们需要在配置文件中配置默认队列驱动为Redis,队列配置文件是config/queue.php:
return ['default' => env('QUEUE_DRIVER', 'sync'),'connections' => ['sync' => ['driver' => 'sync',],'database' => ['driver' => 'database','table' => 'jobs','queue' => 'default','expire' => 60,],'beanstalkd' => ['driver' => 'beanstalkd','host' => 'localhost','queue' => 'default','ttr' => 60,],'sqs' => ['driver' => 'sqs','key' => 'your-public-key','secret' => 'your-secret-key','queue' => 'your-queue-url','region' => 'us-east-1',],'iron' => ['driver' => 'iron','host' => 'mq-aws-us-east-1.iron.io','token' => 'your-token','project' => 'your-project-id','queue' => 'your-queue-name','encrypt' => true,],'redis' => ['driver' => 'redis','connection' => 'default','queue' => 'default','expire' => 60,],],'failed' => ['database' => 'mysql', 'table' => 'failed_jobs',],
];
该配置文件第一个配置项default用于指定默认的队列驱动,这里我们将其值改为redis(实际上是修改.env中的QUEUE_DRIVER)。
二、编写队列任务
首先我们通过如下Artisan命令创建任务类:
php artisan make:job SendReminderEmail
运行成功后会在app/Jobs目录下生成一个SendReminderEmail.php,我们修改其内容如下:
<?php
namespace App\Jobs;use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\User;
use Illuminate\Contracts\Mail\Mailer;
class SendReminderEmail extends Job implements SelfHandling, ShouldQueue
{use InteractsWithQueue, SerializesModels;protected $user;/*** Create a new job instance.** @return void*/public function __construct(User $user){$this->user = $user;}/*** Execute the job.** @return void*/public function handle(Mailer $mailer){$user = $this->user;$mailer->send('emails.reminder',['user'=>$user],function($message) use ($user){$message->to($user->email)->subject('新功能发布');});}
}
三、推送队列任务
手动分发任务
我们可以使用控制器中的DispatchesJobs trait(该trait在控制器基类Controller.php中引入)提供的dispatch方法手动分发任务:
//在控制器中use
use App\Jobs\SendReminderEmail;接着直接调用就是了
$user = App\User::findOrFail($id);
$this->dispatch(new SendReminderEmail($user));
四、运行队列监听器
在浏览器中访问http://laravel.app:8000/mail/sendReminderEmail/1,此时任务被推送到Redis队列中,我们还需要在命令行中运行Artisan命令执行队列中的任务。Laravel为此提供了三种Artisan命令:
queue:work 默认只执行一次队列请求, 当请求执行完成后就终止;
queue:listen 监听队列请求,只要运行着,就能一直接受请求,除非手动终止;
queue:work --daemon 同 listen 一样, 只要运行着,就能一直接受请求,不一样的地方是在这个运行模式下,当新的请求到来的时候,不重新加载整个框架,而是直接 fire 动作。能看出来, queue:work --daemon是最高级的,一般推荐使用这个来处理队列监听。
注:使用 queue:work --daemon ,当更新代码的时候,需要停止,然后重新启动,这样才能把修改的代码应用上。
所以我们接下来在命令行中运行如下命令:
php artisan queue:work --daemon
Laravel7中Redis队列的使用相关推荐
- 队列管理器连接数设置_详解!基于Redis解决业务场景中延迟队列的应用实践,你不得不服啊...
一.业务概述 我们假定设置两个队列,一个队列维护正式工单,另一个队列维护挂起工单.对于挂起操作,我们通过Redis设置key有效时间,当key失效时,客户端监听失效事件,获取工单,实现 挂起工单队列的 ...
- 基于Redis解决业务场景中延迟队列的应用实践
文章目录 一.业务概述 二.代码实现 2.1.工单队列实现 2.1.1.定义上下文类(`WorkOrderContext`) 2.1.2.定义抽象缓存类(`AbstractCacheManager`) ...
- Thinkphp5中使用redis队列发送消息
文章目录 前言 一.php中怎么安装redis? 二.windows中安装redis 三.Thinkphp5中安装think-queue扩展 四.在项目中实际使用. 总结 前言 REmote DIct ...
- php中redis设置队列过期时间,如何在php中使用redis队列操作
如何在php中使用redis队列操作 发布时间:2021-02-04 18:36:00 来源:亿速云 阅读:90 作者:Leah 这篇文章给大家介绍如何在php中使用redis队列操作,内容非常详细, ...
- php中使用redis队列操作实例代码
例1,入队操作: <?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); while(True){try{$value ...
- php自动收货,如何在PHP中实现一个订单自动确认收货的redis队列
如何在PHP中实现一个订单自动确认收货的redis队列 发布时间:2020-12-14 15:45:55 来源:亿速云 阅读:65 作者:Leah 本篇文章为大家展示了如何在PHP中实现一个订单自动确 ...
- Laravel/Lumen 使用 Redis队列
一.概述 在Web开发中,我们经常会遇到需要批量处理任务的场景,比如群发邮件.秒杀资格获取等,我们将这些耗时或者高并发的操作放到队列中异步执行可以有效缓解系统压力.提高系统响应速度和负载能力. 二.配 ...
- python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列
在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...
- python使用redis队列_Python的Flask框架应用调用Redis队列数据的方法
任务异步化打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大小 ...
最新文章
- 把ASCII码的字符串转为数字的16进制
- windows系统git服务器启动,windowsServer服务器上搭建GIt服务器
- jQuery使用ajax跨域请求获取数据
- python apscheduler 脚本 动态_用apscheduler写python定时脚本
- VMware虚拟机下安装Ubuntu16.04镜像完整教程
- 地理信息系统软件测试培训,地理信息系统软件测试方法技术方案
- 安徽关节式焊接机器人_机器人自动焊接技术的优势及应用介绍
- 2 年 6 个月 11 天,外包到阿里的修仙之路!| 原力计划
- 多类别分类问题由 confusion matrix 到分类准确率(accuracy)的计算
- Python_Tips[6] - is 和 == 的区别
- axure树与表格结合_语言开发7:语言迟缓孩子,家庭日常训练,干货满满!【附:表格及图片】...
- 怎么把框架栏变颜色 html,如何修改easyui框架颜色,求指点_html/css_WEB-ITnose
- 高等数学-不定积分基本公式
- Android APP如何获取framework下的资源?
- Visio 常用的快捷键
- 大数据运维工作(Linux,OGG,链路监控,Hadoop运维等)
- python-实现多元回归及预测
- 计算机发展简史 计算机的发展历史介绍
- 爬取B站视频弹幕生成词云
- J9数字论:什么是 DAO?DAO 的起源是什么
热门文章
- 假设检验_python 重点
- 基于BERT预训练的中文命名实体识别TensorFlow实现
- LeetCode中等题之最简分数
- 万事开头难!最新MyBatis程序配置教程(IDEA版)
- Cache 与Memory架构及数据交互
- 利用NVIDIA NGC的TensorRT容器优化和加速人工智能推理
- 如何运行具有奇点的NGC深度学习容器
- NVIDIA TensorRT:可编程推理加速器
- Ubuntu 系统自带的截图工具screenshot
- java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean java.lang.String.equals(j