世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
redis有两种订阅方式,subscribe与psubscribe,subscribe用于频道的订阅,psubscribe用于模式的订阅。频道的订阅即对频道的完全匹配;模式订阅其实是对频道的模糊匹配。
但是两者是由不同的数据结构存储的,具体内容如下:
上图是subpub_channels的数据结构 - 频道的数据结构
上图为pubsub_patterns的数据结构 - 模式的数据结构
至于订阅和退订操作,其实是根据频道或模式查找客户端,以链表的形式进行客户端元素的增加或删除
至于为什么频道订阅的结构是一个频道对应一个客户端列表,而模式订阅的结构却是模式客户端一一对应的关系。笔者猜测可能是由于频道是完全匹配,对应的订阅当前频道的客户端相对较少,客户端链表长度通常不会太长;而模式是频道的模糊匹配,每个模式对应的客户端可能会很多,如果直接用链表将客户端串联起来会太长,所以使用了客户端与模式一一对应的模块以链表的形式串联起来。但是还是觉得如果模式订阅使用与频道订阅相同的数据结构应该也是可以的,并且能够节省存储空间。
获取更多即时消息,请关注公众号