Redis(五)发布与订阅


1、什么是发布与订阅

Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
Redis 的 subscribe 命令可以让客户端订阅任意数量的频道, 
每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。

在这里插入图片描述
三个「订阅者」订阅「Channel1」频道:

在这里插入图片描述
当 Channel1 的后台发送了一个数据到 Channel1 的频道中,这三个订阅了 Channel1 的客户端就会同时收到这个数据:
在这里插入图片描述

2、指令与描述

命令 描述
PSUBSCRIBE pattern [pattern …] 订阅一个或多个符合给定模式的频道
PUBSUB subcommand [argument [argument …]] 查看订阅与发布系统状态
PUBLISH channel message 将信息发送到指定的频道
PUNSUBSCRIBE [pattern [pattern …]] 退订所有给定模式的频道
SUBSCRIBE channel [channel …] 订阅给定的一个或多个频道的信息
UNSUBSCRIBE [channel [channel …]] 退订给定的频道,说明:若没有指定channel,则默认退订所有频道

3、指令测试

在这里插入图片描述
查看活跃的频道
在这里插入图片描述
通过 SUBSCRIBE 命令订阅某频道后,redis-server 里维护了一个字典,字典的键就是一个个 channel ,而字典的值则是一个链表,链表中保存了所有订阅这个 channel 的客户端。SUBSCRIBE 命令的关键,就是将客户端添加到给定 channel 的订阅链表中。
在这里插入图片描述客户端订阅,就被链接到对应频道的链表的尾部,退订则就是将客户端节点从链表中移除。
缺点:

  • 客户端订阅了channel之后,如果接收消息不及时,可能导致消息堆积,当达到消息堆积阈值(默认值为32MB),或者达到某种程度(默认8MB)一段时间(默认为1分钟)后,服务器端会自动断开该客户端连接,避免导致内部内存耗尽。
  • 当连接断开之后,客户端需要使用subscribe或者psubscribe重新进行订阅,否则无法继续接收消息
  • Redis的pubsub不是一种可靠的消息系统。当出现客户端连接退出,或者极端情况下服务端发生主备切换时,未消费的消息会被丢弃

应用场景:

1、实时沟通消息系统
2、个人博客系统(粉丝关注博主,博主发送一篇博客,订阅的用户就可以监听到)
3、电商中,用户下单成功之后向指定频道发送消息,下游业务订阅支付结果这个频道处理自己相关业务逻辑
Redis的pubsub不是一种可靠的消息系统。如果场景复杂,可以使用消息中间件来做,kafka RabbitMQ ActiveMQ RocketMQ …等

猜你喜欢

转载自blog.csdn.net/qq_45637894/article/details/130903886