发布与订阅
- 概述
- 快速入门
- 注意事项
概述
Redis 的发布与订阅功能可以让用户将消息同时发送给多个客户端。
Redis 的发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
这个功能由几个不同的角色协作组成:
- 发布者(publisher):发布消息的客户端。
- 频道(channel):构建在服务器内部,负责接收发布者发送的消息,并将消息转发给频道的订阅者。
- 模式(pattern):构建在服务器内部,负责对频道进行匹配,当被匹配的频道接到消息时,模式也会将消息转发给模式的订阅者。
- 订阅者(subscriber):通过订阅频道或者模式来获取消息的客户端。每个频道或者模式都可以有任意多个订阅者。
发布订阅命令
命令 | 描述 |
---|---|
PUBSUB subcommand [argument [argument 'hello']] | 查看订阅与发布系统状态。 |
PUBLISH channel message | 将信息发送到指定的频道。 |
SUBSCRIBE channel [channel 'hello'] | 订阅给定的一个或多个频道的信息。 |
UNSUBSCRIBE [channel [channel 'hello']] | 指退订给定的频道。 |
PSUBSCRIBE pattern [pattern 'hello'] | 订阅一个或多个符合给定模式的频道。 |
PUNSUBSCRIBE [pattern [pattern 'hello']] | 退订所有给定模式的频道。 |
快速入门
订阅者:打开一个终端,订阅频道 [channel:notice]
[root@localhost ~]# redis-cli -p 6377 --raw
127.0.0.1:6377> SUBSCRIBE channel:notice
subscribe
channel:notice
1
message
channel:notice
hi welcome
message
channel:notice
大家好
订阅者:打开第二个终端,订阅频道 [channel:notice]
[root@localhost ~]# redis-cli -p 6377
127.0.0.1:6377> SUBSCRIBE channel:notice
Reading messages... (press Ctrl-C to quit)
1) > subscribe
2) > channel:notice
3) (integer) 1
1) > message
2) > channel:notice
3) > hi welcome
1) > message
2) > channel:notice
3) > \xe5\xa4\xa7\xe5\xae\xb6\xe5\xa5\xbd>
发布者:打开一个终端,用于给频道 [channel:notice] 发布消息
[root@localhost ~]# redis-cli -p 6377
127.0.0.1:6377> PUBLISH channel:notice > hi welcome>
(integer) 2
127.0.0.1:6377> PUBLISH channel:notice > 大家好>
(integer) 2
注意事项
客户端需要及时消费和处理消息
客户端订阅了channel之后,如果接收消息不及时,可能导致DCS实例消息堆积,当达到消息堆积阈值(默认值为32MB),或者达到某种程度(默认8MB)一段时间(默认为1分钟)后,服务器端会自动断开该客户端连接,避免导致内部内存耗尽。
客户端需要支持重连
当连接断开之后,客户端需要使用subscribe或者psubscribe重新进行订阅,否则无法继续接收消息。
不适用于消息可靠性要求高的场景中
Redis的发布订阅不是一种可靠的消息系统。当出现客户端连接退出,或者极端情况下服务端发生主备切换时,未消费的消息会被丢弃。
Comments | NOTHING
该文章已经关闭评论