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 ,知识分享到这,自己知识成长记录

相关推荐
小陈工2 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
科技小花6 小时前
数据治理平台架构演进观察:AI原生设计如何重构企业数据管理范式
数据库·重构·架构·数据治理·ai-native·ai原生
一江寒逸6 小时前
零基础从入门到精通MySQL(中篇):进阶篇——吃透多表查询、事务核心与高级特性,搞定复杂业务SQL
数据库·sql·mysql
D4c-lovetrain6 小时前
linux个人心得22 (mysql)
数据库·mysql
阿里小阿希7 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神7 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员7 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java7 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿7 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴7 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存