redis消息发布/订阅

发布/订阅是一种消息传输设计模式,消息的发布者将自己的信息发送给订阅者

他并不是直接将消息发送给接受者,而是通过管道广播给订阅者

这里是存在中间介质

在这里插入图片描述

  • 在redis中,提供了发布订阅功能,可以用于消息都传输,在redis中定义了这样三个模型,publisher(消息发布者) channel(管道/频道) subscriber(订阅者),三者可以通过用户的关系绑定来进行消息都传递,订阅者关注对应频道,然后发布者通过频道发布消息,然后再进行消息传递到发布者手上

  • 这种模式是松耦合的,减少了消息发布者与关注者之间的耦合

发布订阅分类

实现原理

字典理解

在redis中,其中关于发布订阅的底层数据结构是list-链表型数据结构

也就是channel的数据结构底层,那么对于上图就存在一种细节划分了
在这里插入图片描述

订阅频道

从机订阅一个频道,然后主机进行消息传输

细节:

  1. 当从机订阅了一个频道时,会自动进行等待,等待主机发送消息传递到相关的从机之中,然后打印出来

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LSvUiGBy-1680609625844)(E:\OneDrive\桌面\REDIS\msg3.png)]

127.0.0.1:6379> subscribe dongqing
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "dongqing"
3) (integer) 1
1) "message"
#订阅的频道
2) "dongqing"
#传入的message
3) "ace"

127.0.0.1:6379> publish dongqing woshizhgeshijieshangzuiniubi1deren
(integer) 1
127.0.0.1:6379> publish dongqing jack
(integer) 1
127.0.0.1:6379> publish dongqing queen
(integer) 1
127.0.0.1:6379> publish dongqing king
(integer) 1
127.0.0.1:6379> publish dongqing ace
(integer) 1
127.0.0.1:6379> 

  1. 结构化传输

关于一个订阅者关注频道底层的数据结构的操作理解,这里当一个订阅者关注一个频道了之后,如果这个频道存在订阅者,那么直接在链表后面添加

  • 如果没有订阅者,直接将当前的频道设置为新的频道,等待新的订阅者添加
  • 反之,就是直接进行删除操作,空链表操作
取消订阅
127.0.0.1:6379> unsubscribe dongqing
1) "unsubscribe"
2) "dongqing"
3) (integer) 0
127.0.0.1:6379> 

在这里插入图片描述

订阅模式

订阅模式

使用psubscribe 操作传输理解

订阅模式就是多个频道之间的嵌合理解,复合结构操作这是非常必要的

底层就是将链表中的各个节点实现为list集合,不同的部分对应不同的内容理解

在这里插入图片描述

-注意这里的理解操作,联合其中的psubscribel结合复合键的操作,其实这里看起来是三个单独的键值,但是底层则是嵌合的操作理解

127.0.0.1:6379> psubscribe users name age
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "users"
3) (integer) 1
1) "psubscribe"
2) "name"
3) (integer) 2
1) "psubscribe"
2) "age"
3) (integer) 3
1) "pmessage"
2) "users"
3) "users"
4) "dongqing"
1) "pmessage"
2) "name"
3) "name"
4) "jack"
1) "pmessage"
2) "age"
3) "age"
4) "20"

127.0.0.1:6379> publish user dongqing
(integer) 0
127.0.0.1:6379> publish users dongqing
(integer) 1
127.0.0.1:6379> publish name jack
(integer) 1
127.0.0.1:6379> publish age 20
(integer) 1
127.0.0.1:6379> 

取消订阅模式

使用命令punsubscribe

127.0.0.1:6379> punsubscribe user name age
1) "punsubscribe"
2) "user"
3) (integer) 0
127.0.0.1:6379> 

能力应用

Redis 发布订阅应用场景比较广泛,类似微博/微信公众号这种关注/订阅以及消息推送能力,同样还可以作为实时消息系统(类似聊天/群聊能力支持)

聊天室这种类型的理解如何实现才是非常必要的

我是一位爱生活的程序员,欢迎大家关注我的频道:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值