发布-订阅
2022年10月12日大约 2 分钟约 662 字
1. Redis 发布/订阅模式概述
Redis PubSub 模块又称发布订阅者模式,是一种消息传递系统,实现了消息多播功能。这里所谓的消息多播是指:生产者生产一次消息,中间件负责将消息复制到多个消息队列中,每个消息队列由相应的消费组进行消费,这是分布式系统常用的一种解耦方式。
发布者(即发送方)发送消息,订阅者(即接收方)接收消息,而用来传递消息的链路则被称为 频道(channel)。
在 Redis 中,一个客户端可以订阅任意数量的 channel 。
Redis 的发布/订阅模式如图所示:
订阅频道 | 向频道发送消息 |
---|---|
![]() | ![]() |
2. 发布订阅示例
2.1 订阅者/等待接收消息
首先打开 Redis 客户端,然后订阅了一个名为 www.biancheng.net 的 channel,使用如下命令:
# 订阅 channel
127.0.0.1:6379> SUBSCRIBE www.biancheng.net
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "www.biancheng.net"
3) (integer) 1
上述示例使用SUBSCRIBE
命令订阅了名为 www.biancheng.net 的 channel。命令执行后该客户端会出处于等待接收消息的阻塞状态。
2.2 发布者发送消息
下面再启动一个 Redis 客户端,输入如下命令:
127.0.0.1:6379> PUBLISH www.biancheng.net "this is website"
(integer) 1
127.0.0.1:6379> PUBLISH www.biancheng.net "hello world"
(integer) 1
127.0.0.1:6379> PUBLISH www.biancheng.net "how are you"
(integer) 1
通过上述PUBLISH
命令发布了三条信息。现在两个客户端在处于同一个名为 www.biancheng.net 的频道上,前者负责接收消息,后者负责发布消息。
2.3 订阅者成功接收消息
完成了上述操作后,您会在接收消息的客户端得到如下输出结果:
127.0.0.1:6379> SUBSCRIBE www.biancheng.net
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "www.biancheng.net"
3) (integer) 1
1) "message"
2) "www.biancheng.net"
3) "this is website"
1) "message"
2) "www.biancheng.net"
3) "hello world"
1) "message"
2) "www.biancheng.net"
3) "how are you"
3. 常用命令
Redis 订阅/发布 常用命令:
命令 | 说明 |
---|---|
SUBSCRIBE channel [channel ...] | 订阅一个或者多个频道的消息。 |
UNSUBSCRIBE [channel [channel ...]] | 退订指定的频道。 |
PUBLISH channel message | 将信息发送到指定的频道。 |
PSUBSCRIBE pattern [pattern ...] | 订阅一个或多个符合指定模式的频道。 |
PUNSUBSCRIBE [pattern [pattern ...]] | 退订所有指定模式的频道。 |
PUBSUB subcommand [argument [argument ...]] | 查看发布/订阅系统状态,可选参数
|