redis - redis的两种订阅方式的实现原理

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

redis有两种订阅方式,subscribe与psubscribe,subscribe用于频道的订阅,psubscribe用于模式的订阅。频道的订阅即对频道的完全匹配;模式订阅其实是对频道的模糊匹配。
但是两者是由不同的数据结构存储的,具体内容如下:
在这里插入图片描述
上图是subpub_channels的数据结构 - 频道的数据结构

在这里插入图片描述
上图为pubsub_patterns的数据结构 - 模式的数据结构

至于订阅和退订操作,其实是根据频道或模式查找客户端,以链表的形式进行客户端元素的增加或删除

至于为什么频道订阅的结构是一个频道对应一个客户端列表,而模式订阅的结构却是模式客户端一一对应的关系。笔者猜测可能是由于频道是完全匹配,对应的订阅当前频道的客户端相对较少,客户端链表长度通常不会太长;而模式是频道的模糊匹配,每个模式对应的客户端可能会很多,如果直接用链表将客户端串联起来会太长,所以使用了客户端与模式一一对应的模块以链表的形式串联起来。但是还是觉得如果模式订阅使用与频道订阅相同的数据结构应该也是可以的,并且能够节省存储空间。

获取更多即时消息,请关注公众号
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

这是谁的博客?

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

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

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

打赏作者

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

抵扣说明:

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

余额充值