Redis学习笔记—Redis的模式订阅与退订
1.发布订阅简介
- 发布订阅是一种通信的模式,Redis提供了发布订阅功能,可以用于消息的传输
- Redis的发布订阅机制包括三个部分,
publisher(发布)
,subscriber(订阅)
和Channel
发布者
和订阅者
都是Redis
客户端,Channel
则为Redis
服务器端发布者
将消息发送到某个的频道,订阅了这个频道的订阅者
就能接收到这条消息
2.发布订阅机制:订阅某个频道或模式:
客户端(client)
:- 属性为pubsub_channels,该属性表明了该客户端订阅的所有频道
- 属性为pubsub_patterns,该属性表示该客户端订阅的所有模式
typedef struct redisClient { ... //该client订阅的channels,以channel为key用dict的方式组织,value就是client dict *pubsub_channels; //该client订阅的pattern(模式),以list的方式组织,里面是订阅的pattern list *pubsub_patterns; ... } redisClient;
服务器端(RedisServer)
:- 属性为pubsub_channels,该服务器端中的所有频道以及订阅了这个频道的客户端
- 属性为pubsub_patterns,该服务器端中的所有模式和订阅了这些
模式
的客户端
struct redisServer { ... // redis server进程中维护的channel dict,它以channel为key // 订阅这个channel的所有client是value,value是list的类型 dict *pubsub_channels; //redis server进程中维护的pattern,类型是list,里面放pattern和客户端(clients),也就是订阅这个模式的所有客户端 list *pubsub_patterns; int notify_keyspace_events; ... };
过程介绍
:- 当客户端向某个频道发送消息时,Redis首先在redisServer中的pubsub_channels中找出键为该频道的结点,遍历该结点的值,即遍历订阅了该频道的所有客户端,将消息发送给这些客户端。
- 然后,遍历结构体redisServer中的pubsub_patterns,找出包含该频道的模式的结点,将消息发送给订阅了该模式的客户端。
使用场景
:哨兵模式,Redisson框架使用- 在Redis哨兵模式中,哨兵通过发布与订阅的方式与Redis主服务器和Redis从服务器进行通信。这个我们将在后面的章节中详细讲解。
- Redisson是一个分布式锁框架,在Redisson分布式锁释放的时候,是使用发布与订阅的方式通知的,这个我们将在后面的章节中详细讲解。