知道CSDN你的关注与发布订阅怎么做的吗?教你用Redis实操一下

Redis订阅发布

先聊什么是发布订阅模型

你知道CSDN的订阅发布是如何实现的?其实订阅发布模型说起来是相对简单的:存在三个角色。

  • 消息发布者:给相应频道发送消息的人
  • 频道:相当于发送消息的频道
  • 消息订阅者:订阅频道接收消息的人

image-20210115113043369

消息发布者发布消息到频道(Redis中频道的实现其实是一个字典,字典的键是频道名,字典的值是一个个消息订阅者这里不细刨底层实现了),然后消息订阅者就能从频道中拿到对应的消息(消息订阅者能知道消息是从哪个频道发送过来的)

使用场景

  1. 你看到的CSDN的关注系统其实就是一个订阅发布系统,虽然其可能不是Redis来实现的,但是Redis是可以实现的。
  2. 公众号,微博(微博的频道关注系统等)等。
  3. 实时聊天系统,实时聊天系统相当于聊天室就是频道。

因此发布订阅模型是重要的!值得研究和学习。

Redis中发布订阅系统的命令

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

测试使用

发布端

mylocalhost:0>PUBLISH leiyu "hello,fans"  #发布消息"hello,fans"到频道leiyu
"1"
mylocalhost:0>

订阅者

local:0>SUBSCRIBE leiyu # 订阅频道leiyu
切换到推送/订阅模式,关闭标签来停止接收信息
1)  "subscribe"
2)  "leiyu"
3)  "1"
1)  "message"  #消息
2)  "leiyu"  #哪个频道传来的消息
3)  "hello,fans"  #具体的消息信息

image-20210115115905145

image-20210115115916851

实现原理简单剖析

Redis通过PUBLISH、SUBSCRIBE和PSUBSCRIBE等命令实现发布订阅功能的。

通过SUBSCRIBE命令订阅某频道后,redis-server里维护了一个字典,字典的键就是一个个频道,而字典的值则是一个链表,链表中保存了所有订阅这个channel的客户端。SUBSCRIBE命令的关键,就是将客户端添加到给定的channel的订阅链中。

image-20210115120828084通过PUBLISH命令向订阅者发送消息,redis-server会使用给定的频道作为键,在它所维护的channel字典中查找记录了订阅这个频道的所有客户端额链表,遍历这个链表,将消息发布给所有订阅者。

小结

Pub/Sub从字面上理解就是发布(PUBLISH)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布以及消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能就是作为实时消息系统,比如普通的聊天室,群聊等。

消息订阅,当一个key值上进行了消息发布后,所有订阅它的客户端都会收到相应的消息。这一功能就是作为实时消息系统,比如普通的聊天室,群聊等。

之后我可能会系统的学习消息队列,之后也会发布博客。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炒冷饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值