Redis.发布与订阅


发布与订阅

  • 概述
  • 快速入门
  • 注意事项

概述

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的发布订阅不是一种可靠的消息系统。当出现客户端连接退出,或者极端情况下服务端发生主备切换时,未消费的消息会被丢弃。

声明:Rock 版权所有,内容均为原创,欢迎转载。

转载:转载请注明原文链接 - Redis.发布与订阅


我是一个程序员,致力于网页开发,我还很年轻,什么也不懂。