【redis】来吧,展示一下redis 发布-订阅模式

举报
看,未来 发表于 2020/12/30 01:21:32 2020/12/30
【摘要】 前言推送 什么是“发布 - 订阅 模式”? 答:你知道“观察者模式”吗? “发布 - 订阅 模式用来干嘛”? 答:你知道消息队列(MQ)的削峰、异步、解耦合吗? redis的配置文件中是怎么来描述这个特性的? 答:可曾欣赏过redis.conf 吗? 这一切的一切,我都给你准备好了。 传送门: 用C++跟你聊聊“观察者模式” 消息队列:削峰、异步、解耦,以及该...

在这里插入图片描述

前言推送

什么是“发布 - 订阅 模式”? 答:你知道“观察者模式”吗?
“发布 - 订阅 模式用来干嘛”? 答:你知道消息队列(MQ)的削峰、异步、解耦合吗?
redis的配置文件中是怎么来描述这个特性的? 答:可曾欣赏过redis.conf 吗?

这一切的一切,我都给你准备好了。

传送门
用C++跟你聊聊“观察者模式”
消息队列:削峰、异步、解耦,以及该如何选择MQ
redis.conf翻译与配置(五)


切入正题:发布/订阅

先来这么几张图:
在这里插入图片描述

在这里插入图片描述

Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。

在上面的两张图里面,很明显那个频道是channel1,而客户端就那三儿。

至于谁来发布消息啊?那自然也是一个充当“发布者”角色的客户端。
当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端。

废话不多说,直接看操作:

Redis的消息机制:发布订阅
	一publish: 发布消息
		语法: publish channel名称"消息的内容”
	一subscribe:订阅消息
		语法: subscribe channel 名称
 	——psubsribe:使用通配符来订阅消息
		语法: psubsribe channel*名称

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
在这里插入图片描述

退订频道

使用 UNSUBSCRIBE 命令可以退订指定的频道, 这个命令执行的是订阅的反操作: 它从 pubsub_channels 字典的给定频道(键)中, 删除关于当前客户端的信息, 这样被退订频道的信息就不会再发送给这个客户端。

使用 PUNSUBSCRIBE 命令可以退订指定的模式, 这个命令执行的是订阅模式的反操作: 程序会删除 redisServer.pubsub_patterns 链表中, 所有和被退订模式相关联的 pubsubPattern 结构, 这样客户端就不会再收到和模式相匹配的频道发来的信息。

由于Redis的订阅操作是阻塞式的,因此一旦客户端订阅了某个频道或模式,就将会一直处于订阅状态直到退出。在SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE和PUNSUBSCRIBE命令中,其返回值都包含了该客户端当前订阅的频道和模式的数量,当这个数量变为0时,该客户端会自动退出订阅状态。

发布 - 订阅 实现

1)SUBSCRIBE
在这里插入图片描述

2)PSUBSCRIBE
在这里插入图片描述

3)PUBLISH
在这里插入图片描述

应用场景

构造实时消息系统,例如:即时聊天,群聊
文章推送
集中配置中心管理,当配置信息发生更改后,订阅配置信息的节点都可以收到 

  
 
  • 1
  • 2
  • 3

and so on.

Redis的发布订阅功能与Redis中的数据存储时无关的,它不会影响Redis的key space,即不会影响Redis中存储的数据,但通过发布订阅机制,Redis还提供了另一个功能,即Keyspace Notification,允许客户端通过订阅特定的频道,从而得知是否有改变Redis中的数据的事件。


在这里插入图片描述

文章来源: lion-wu.blog.csdn.net,作者:看,未来,版权归原作者所有,如需转载,请联系作者。

原文链接:lion-wu.blog.csdn.net/article/details/108234986

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。