Lumen开发:结合Redis实现消息队列(1)
1、简介
Lumen队列服务为各种不同的后台队列提供了统一的API。队列允许你推迟耗时任务(例如发送邮件)的执行,从而大幅提高web请求速度。
1.1 配置
.env文件的QUEUE_DRIVER选项决定应用使用的队列“驱动”。
QUEUE_DRIVER可以选择"sync", "beanstalkd", "sqs", "iron", "redis" 五种驱动器。
1. sync是本地调试用的同步驱动器
2. beanstalkd 是一个专业队列服务驱动器:http://kr.github.io/beanstalkd/
3. sqs和iron是国外第三方队列服务
4. 最后一项redis给了我们一个使用redis的理由,这样我们顺便把缓存服务和session服务全部迁移到redis上了。
0. 顺便说一句,session驱动器千万别用mysql,处理时间1S不是梦,哎,看谁呢,说的就是你,1S哥!
1.2 队列驱动预备知识
数据库
为了使用database
队列驱动,需要一张数据库表来存放任务,要生成创建该表的迁移,运行Artisan命令queue:table
,迁移被创建好了之后,使用migrate
命令运行迁移:
1 2 | php artisan queue:table php artisan migrate |
其它队列依赖
下面是以上列出队列驱动需要安装的依赖:
1 2 3 4 | Amazon SQS: aws/aws-sdk-php ~3.0 Beanstalkd: pda/pheanstalk ~3.0 IronMQ: iron-io/iron_mq ~2.0 Redis: predis/predis ~1.0 和 illuminate/redis |
其他包安装都还比较正常,不过illuminate/redis在require时就一直。。。
后来发现是版本不兼容的问题,Java,C#的毒终于还是在php上重演了。。。
一言不合,我直接update了,结果还是同一个错误。。。
最后执行了composer require illuminate/redis v5.4.*,嘿嘿,就可以了,真是mmp了
好了,接下来就是愉快的让lumen与redis一起搞事啦!!!心花怒放
首先是bootstrap/app.php
1 2 3 4 5 | $app->register(Illuminate\Redis\RedisServiceProvider:: class ); $app->withFacades(); $app->withEloquent(); |
注册一下Redis的服务供应Illuminate\Redis\RedisServiceProvider::class
然后是config/database.php
1 2 3 4 5 6 7 8 9 10 11 12 | 'redis' => [ 'cluster' => env( 'REDIS_CLUSTER' , false ), 'default' => [ 'host' => env( 'REDIS_HOST' , '127.0.0.1' ), 'port' => env( 'REDIS_PORT' , 6379), 'database' => env( 'REDIS_DATABASE' , 0), 'password' => env( 'REDIS_PASSWORD' , null ), ], ], |
我这边是本地测试环境,所有默认不用改
接下来测试一下
1 2 | app( 'redis' )-> set ( 'lumen' , 'Hello, Lumen.' ); return app( 'redis' )-> get ( "lumen" ); |
结果输出:Hello, Lumen.
下一篇详细讲Redis实现消息队列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!