首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

《Redis源码学习札记》发布/订阅

2013-10-05 
《Redis源码学习笔记》发布/订阅《Redis源码学习笔记》文章列表Redis的SUBSCRIBE命令,可以让客户端订阅任意数

《Redis源码学习笔记》发布/订阅
《Redis源码学习笔记》文章列表

Redis的SUBSCRIBE命令,可以让客户端订阅任意数量的频道,每当有新消息发送到某个频道时,Redis就会把这消息发送给所有订阅该频道的客户端;如下图:客户端Client_1,Client_2,Client_3都订阅了频道channel,当有消息PUBLISH到频道channel时,这三个客户端都将收到消息:



原理:RedisServer内部维护了一个pubsub_channels字典,其中字典的键就是被订阅的频道,而键值就是订阅该频道的客户端列表;



这样,当一个客户端执行PUBLISH channel_name命令时,Redis就可以根据channel_name在pubsub_channels中找到与其关联的客户端列表,然后把消息发送给它们,伪代码;



所以完整的PUBLISH命令伪代码如下:
def publishCommand(channel, msg):# 获取订阅channel的所有客户端列表    client_list = redisServer.pubsub_channels.get(channel)    if client_list is None: return    # 向每个客户端发送消息    for client in client_list:        client.sendMessage(msg)    # 遍历pubsub_patterns    for pattern, client in redisServer.pubsub_patterns:    # 若模式与channel匹配,则把消息发送给订阅该模式的客户端    if pattern.match(channel):     client.sendMessage(msg)

更多细节请看:pubsub.c/publishCommand函数

总结:
1. 熟悉发布订阅相关命令:subscribe/unsubscribe psubscribe/punsubscribe publish;
2. 了解发布订阅实现原理;

热点排行