Redis PubSub发布订阅

一、Redis PubSub发布订阅是什么?

Redis PubSub 又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为 channel(频道)。在 Redis 中,一个客户端可以订阅任意数量的 channel(可译为频道)。

消息多播:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的一种解耦方式。

二、发布/订阅流程

下图为“发布/订阅者”模式的工作流程:

1) 订阅者/等待接收消息

首先打开 Redis 客户端,然后订阅了一个名为“www.augus.com”的 频道,使用如下命令:

# 订阅频道
127.0.0.1:6379> SUBSCRIBE www.augus.com
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "www.augus.com"
3) (integer) 1

上述示例使用SUBSCRIBE命令订阅了名为 www.augus.com 的 频道。命令执行后该客户端会出处于等待接收消息的阻塞状态。

2) 发布者/发送消息

下面再启动一个 Redis 客户端,输入如下命令:

127.0.0.1:6379>
# 像www.augus.com发布三条信息 
127.0.0.1:6379> PUBLISH www.augus.com "hello world"
(integer) 1
127.0.0.1:6379> PUBLISH www.augus.com "this is augus"
(integer) 1
127.0.0.1:6379> PUBLISH www.augus.com "how is me"
(integer) 1

3) 订阅者/成功接收消息

完成了上述操作后,您会在接收消息的客户端得到如下输出结果:

订阅的客户端每次可以收到一个 3 个参数的消息分别为:

  • 消息的种类
  • 始发频道的名称
  • 实际的消息内容

三、PubSub常用命令汇总

 

Redis PubSub常用命令
命令说明
PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合指定模式的频道。
PUBSUB subcommand [argument [argument ...]] 查看发布/订阅系统状态,可选参数
1) channel 返回在线状态的频道。
2) numpat 返回指定模式的订阅者数量。
3) numsub 返回指定频道的订阅者数量。
PUBLISH channel message 将信息发送到指定的频道。
PUNSUBSCRIBE [pattern [pattern ...]] 退订所有指定模式的频道。
SUBSCRIBE channel [channel ...] 订阅一个或者多个频道的消息。
UNSUBSCRIBE [channel [channel ...]] 退订指定的频道。

四、基本命令应用

PSUBSCRIBE:订阅一个或多个符合指定模式的频道。

# #查看发布订阅系统状态,返回相应的频道
127.0.0.1:6379> PSUBSCRIBE www*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "www*"
3) (integer) 1
# 按ctrl+c退出阻塞状态
^C(2.23s)

PUBSUB:查看发布/订阅系统状态,需要有两个redis客户端演示

  • 参数:channel

  • 参数:numsub 

  • 参数:numpat 

UNSUBSCRIBE:退订指定频道

127.0.0.1:6379> UNSUBSCRIBE www.augus.com
1) "unsubscribe"
2) "www.augus.com"
3) (integer) 0
127.0.0.1:6379> 
[yxy@localhost ~]$ 

PUNSUBSCRIBE:退订所有给定模式的频道

127.0.0.1:6379> PUNSUBSCRIBE www*
1) "punsubscribe"
2) "www*"
3) (integer) 0
127.0.0.1:6379> 

PUBLISH:将消息发送给指定的频道

五、Redis 发布订阅的优缺点

  • 发布的消息在Redis系统中不能持久化,因此,必须先执行订阅,再等待消息发布。如果先发布了消息,那么该消息由于没有订阅者,消息将被直接丢弃
  • 消息只管发送对于发布者而言消息是即发即失的,不管接收,也没有ACK机制,无法保证消息的消费成功。
  • 以上的缺点导致Redis的Pub/Sub模式就像个小玩具,在生产环境中几乎无用武之地,为此
  • Redis5.0版本新增了Stream数据结构,不但支持多播,还支持数据持久化,相比Pub/Sub更加的强大,其次更建议还是redis做好缓存,而消息中间件的操作交给专业的中间件例如RebbitMQ完成
posted @ 2023-03-08 18:17  酒剑仙*  阅读(105)  评论(0)    收藏  举报