前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis消息发布订阅

Redis消息发布订阅

作者头像
Lvshen
发布2022-05-05 16:37:15
发布2022-05-05 16:37:15
75800
代码可运行
举报
运行总次数:0
代码可运行

发布订阅

谈到「Redis」你可能会想到用作缓存,然而「Redis」除了做缓存还有很多功能。比如做分布式锁,生成全局的「ID」,可以做延迟队列。除了这些「Redis」还可以做消息的发布订阅。

「Redis」 发布订阅(「pub/sub」)是一种消息通信模式:发送者(「pub」)发送消息,订阅者(「sub」)接收消息。

「Redis」 客户端可以订阅任意数量的频道。

如果你不知道什么是发布订阅,请看下面维基百科的解释:

❝在软件架构中,「发布」-「订阅」是一种消息范式,消息的发送者(称为「发布」者)不会将消息直接发送给特定的接收者(称为「订阅」者)。而是将「发布」的消息分为不同的类别,无需了解哪些「订阅」者(如果有的话)可能存在。同样的,「订阅」者可以表达对一个或多个类别的兴趣,只接收感兴趣的消息,无需了解哪些「发布」者(如果有的话)存在。 ❞

Redis订阅消息

「Redis」的发布订阅系统有点类似于我们生活中的电台,电台可以在某一个频率上发送广播,而我们可以接收任何一个频率的广播,这种消息订阅没有「Kafka」高效。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:

图片来源:https://www.redis.net.cn/tutorial/3514.html

当有新消息通过 「PUBLISH」 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

图片来源:https://www.redis.net.cn/tutorial/3514.html

订阅消息的方式如下:

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:12001> SUBSCRIBE c1 c2 c3
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "c1"
3) (integer) 1
1) "subscribe"
2) "c2"
3) (integer) 2
1) "subscribe"
2) "c3"
3) (integer) 3

这个表示接收「c1,c2,c3」三个频道传来的消息,发送消息的方式如下:

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:12001> PUBLISH c1 "I am lvshen"
(integer) 1

「c1」这个频道上有消息发出时,此时在消息订阅控制台可以看到如下输出:

代码语言:javascript
代码运行次数:0
运行
复制
1) "message"
2) "c1"
3) "I am lvshen"

「Redis」中,我们也可以使用模式匹配订阅,如下:

代码语言:javascript
代码运行次数:0
运行
复制
127.0.0.1:12001> PSUBSCRIBE c* 
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "c*"
3) (integer) 1

此时可以接收到所有以「c」开头的频道发来的消息。

创建「c1」频道

另一边在这个频道上发布一个消息

这里接收到我发布的消息。

关于发布订阅的问题

有人可能会说,有了「Redis」发布订阅,是不是就可以取代「Kafka」的发布订阅了呢。当然不能,「Kafka」的发布订阅能处理海量数据,而「Redis」不能。而且当「Redis」消费端取消订阅,数据就会消失。不能持久化。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lvshen的技术小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 发布订阅
  • Redis订阅消息
  • 关于发布订阅的问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档