请问redis实现消息队列有几种方法?
网友回复
第一种通过lpop与lpush list队列
消息发送端
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//$password = '123456';
//$redis->auth($password);
$arr = array('h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd');
foreach ($a...点击查看剩余70%
还有一种sub pub消息
消息生产端
<?php
$channelName = "testPubSub";
$channelName2 = "testPubSub2";
//向指定频道发送消息
try {
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
for ($i = 0; $i < 5; $i++) {
$data = array('key' => 'key'.$i, 'data' => 'testdata');
$ret = $redis->publish($cha...点击查看剩余70%
stream流式消息队列处理方式
<?php
//连接reids
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
//创建一个消息队列
// 星号表示自动生成id,后面参数key,value
$redis->rawCommand('xadd', 'mq2', '*', 'ms1g', '1');
//在消息队列上创建一个组为mqGroup3
$redis->rawCommand('xgroup', 'create', 'mq2', 'mqGroup3', '0');
//读取组为mqGroup3的stream消息,每次读取一个,消费者为consumerA
$_data = $redis->rawCommand('xreadgroup', 'group', 'mqGroup3', 'consumerA', 'count', '1', 'streams', 'mq2', '>');
//处理完后确认消息已处理,最后一个参数是消息id
$redis->rawCommand('xack', 'group', 'mqGroup3', '12132131234-00');
echo var_export($_data, true)."\n";
Stream为redis 5.0后新增的数据结构。支持多播的可持久化消息队列,实现借鉴了Kafka设计。
Redis Stream的结构如上图所示,它有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的ID和对应的内容。消息是持久化的,Redis重启后,内容还在。
每个Stream都有唯一的名称,它就是Redis的key,在我们首次使用xadd指令追加消息时自动创建。
每个Stream都可以挂多个消费组,每个消费组会有个游标last_delivered_id在Stream数组之上往前移动,表示当前消费组已经消费到哪条消息了。每个消费组都有一个Stream内唯一的名称,消费组不会自动创建,它需要单独的指令xgroup create进行创建,需要指定从Stream的某个消息ID开始消费,这个ID用来初始化last_de...点击查看剩余70%
还可以用sort set
<?php
$key = "test";
$redis = new Redis();
//建立一个长链接
$redis->connect('127.0.0.1', 6379);
$redis->zAdd(
$key,
time(),
"msgvalue"
);
...点击查看剩余70%
有没有免费让ai自动帮你接管操作电脑的mcp服务?
mcp为啥用Streamable HTTP 替代 HTTP + SSE?
scratchjr有没有开源的前端html网页版本源代码?
多模态大模型能否根据ui交互视频来来模仿写出前端交互动画效果ui代码?
如何用阿里云oss+函数计算fc+事件总线EventBridge+消息队列+数据库+redis缓存打造一个高并发弹性系统?
阿里云函数计算 FC如何在海外节点搭建一个代理网络?
ai studio中gemini build的代码如何发布到github pages等免费网页托管上 ?
如何在cursor、qoder、trae中使用Claude Skills功能?
有没有不用u盘就能重装系统的开源工具?
python如何固定摄像头实时计算停车场停车位剩余数量?


