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

在这里插入图片描述

前言推送

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

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

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


切入正题:发布/订阅

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

在这里插入图片描述

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

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

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

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

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

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

退订频道

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

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

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

发布 - 订阅 实现

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

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

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

应用场景

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

and so on.

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


在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43762191/article/details/108234986