Redis发布订阅【充当消息中间件】

Redis发布订阅【充当消息中间件】

1.Redis Stream

借鉴Kafka设计

实践命令

消息生产:

sh 复制代码
##* : 代表的是Redis自动给你生成id(如上图)
xadd stream1 * name zhengqian

##想自己定义id: 最好是xxxx-x的格式,但一般采用Redis的自定义id
xadd stream1 12345 name zhengqian

#查看创建的类型
type stream1

查看Stream里面有几条数据

sh 复制代码
#表示查询Stream1这个里面有几条数据,-:表示最小  +:表示最大
xrange stream1 - +

查看长度

sh 复制代码
xlen  stream1

删除某个数据

sh 复制代码
xdel   stream1  指定的数据key

我们知道消息中间主要是异步,消息解耦,那在我们所说的Redis中怎么读取呢?

读取命令

sh 复制代码
## 表示从stream1中读取一条数据(0-0:表示起始位置start-end)
xread count 1 streams stream1 0-0
sh 复制代码
## block 0 : 表示一直阻塞着:监听生产者那边有没有写入数据
## block 1000 :表示阻塞1000毫秒
## 表示从末尾读取 
xread block 0  count 1 streams stream1  $

为甚么在消息中间件重:消费的时候使用群组?

首先说下MQ:应用于分布式系统:MQ(MessageQueue)->消息中间件(消息队列)

当中MQ有一个重要的功能:解耦;MQ充当消息的搬运工

还有两个功能:异步 :,削峰填谷(流量削峰)

那我们再回到群组: 我们知道消费者他们一般消费的并发能力是很低的,

那群组的能力就体现了:

  • 1.增加消费者的数量
  • 2.应对不同的场景

Redis完成群组消费

在MQ的消费中,对于群组内的消息,都要注意一个很重要的点: 避免重复消费

就这些吧,主要就是用来消费

消费者的命令:

sh 复制代码
##在Redis中针对stream1创建一个cg1群组:0-0:从头开始消费(就是一个通配的概念)
xgroupe create  stream1 cg1 0-0
####在Redis中针对stream1创建一个cg1群组:从末尾开始消费
xgroupe create  stream1 cg1 $

查看stream1是否有群组信息

sh 复制代码
xinfo stream stream1

对于10):表示创建的数量

查看群组的所有信息

sh 复制代码
##查看群组stream1所有的信息 
xinfo groups stream1

消费信息

sh 复制代码
##xreadgroupe: 消费群组
##groupe cg1 consumer1:消费群组名称为cg1下面的消费者consumer1
##count 1:表示消费1条 
##streams team1:表示消费的消息队列是streams steam1
## >:表示消费,并显示消费的信息
##block 0:表示没有生产者的消息,就阻塞等着生产的数据到来,并读一条(然后阻塞解除)
xreadgroupe  groupe cg1 consumer1 count 1 block 0 streams steam1 >

我们查看消费者cg1里面的结构

为了保证消费者的将生产者的数据消费掉,我们需要ACK确认

ACK确认

sh 复制代码
## 
xack  stream1 cg1  xxxxx-0  

查询Redis的国内中文网站: www.redis.cn/commands/xcliam.html

OK ,知识分享到这,自己知识成长记录

相关推荐
2603_965148114 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
ltl4 小时前
RocksDB 经典故障排查:L0、compaction 与 write stall
数据库
xfhuangfu5 小时前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT5 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData5 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
J_bean6 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交
J_bean6 小时前
MySQL InnoDB 如何检测死锁、判定死锁、处理死锁
数据库·mysql·死锁·死锁检测·处理死锁·死锁判定
浪子明X6 小时前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
杜子不疼.6 小时前
国产数据库撑起固井软件自主化:金仓 × 中海油服「海恒 Cemsol」落地解析
数据库
隔窗听雨眠7 小时前
GBase 8s并发控制深度解析:封锁机制、隔离级别与死锁处理全攻略
服务器·数据库·oracle