Redis发布与订阅
2021-04-25 09:47:00 0 举报
Redis发布与订阅
作者其他创作
大纲/内容
客户端C
news.et频道
查看订阅信息
client-7:SUBSCRIBE \"news.it\"
订阅
PUBLISH \"news.it\" \"hello\"
发送消息
pubsubPattern
clientclient-7
pattern\"music.*\"
client-3
模式订阅与频道订阅的底层原理不相同,频道订阅的客户端与频道的关系保存在redisServer.pubsub_channels字典中,模式订阅保存在redisServer.pubsub_patterns链表中保存。
PUBLISH NUMSUB [channel-1 channel-2 … channel-n] //返回订阅频道的客户端个数(字典链表元素个数)PUBSUB NUMPAT //返回当前服务器订阅模式的个数(模式链表元素个数)
2
模式订阅
添加模式,即在链表后追加
clientclient-9
pattern\"technology.*\"
客户端B
redisServer结构体
pubsub_channels
\"news.it\"
\"news.sport\"
\"news.business\"
client-8:PUNSUBSCRIBE \"book.*\"
匹配
订阅不存在的频道
pattern\"news.*\"
\"hello\"
客户端A
client-4
订阅已经存在的频道
news.it频道
添加节点
client-7:SUBSCRIBE \"news.technology\"
news.[ie]it模式
字典的键是频道名称,值是一个链表,链表记录了订阅该频道的客户端
频道订阅
client-7
Redis服务器在结构体redisServer中维护了一个字典用于关联频道与客户端的关系,所有频道的订阅关系都保存在这里
client-1
client-6
先向字典中添加该频道
client-3退订news.business,从链表中删除
client-10:PSUBSCRIBE \"technology.*\"
1
客户端D
clientclient-8
pattern\"book.*\"
client-3:UNSUBSCRIBE \"news.business\"
dict *pubsub_channels;
Redis有两种订阅模式,其底层的实现原理也不一样1、SUBSCRIBE channel [channel … ](频道订阅)SUBSCRIBE \"news.it\" //订阅news.itUNSUBSCRIBE channel [channel …] (退订频道)2、PSUBSCRIBE pattern [pattern …](模式订阅)PSUBCRIBE \"news.[ia].it\" //订阅newsi.it和频道newsa.itPUNSUBSCRIBE channel [channel …](退订模式)
向字典中news.it的链表追加client-7
news.technology
退订模式
list *pubsub_patterns;
PUBLISH <channel> <message>1、将消息message发送给channel频道的所有订阅者2、如果一个或者多个模式pattern与频道channel相匹配,那么将消息发送给pattern模式的订阅者
PUBLISH CHANNELS [pattern] //返回服务器当前被订阅的频道,pattern可选1、不指定pattern则返回当前服务器被订阅的所有频道2、指定pattern则返回与pattern相匹配的频道
0 条评论
下一页