跳至主要內容

Redis 发布与订阅

blacklad大约 1 分钟RedisRedisRedis 设计与实现

Redis 发布与订阅

  1. SUBSCRIBE "name" 可以订阅一个或多个频道,成为频道的订阅者
  2. PUBLISH “name” "hello" 向频道发送消息
  3. PSUBSCRIBE 订阅一个或多个模式(正则匹配)

1 订阅

1.1 订阅频道

Redis将所有订阅关系存放在 dict(pubsub_channels) 里面,字典的键是被订阅的频道,值是一个链表对应订阅这个频道的客户端链表。

当有新的客户端订阅时,会将 client` 对应的节点加在链表的末尾。

当客户端通过 UNSUBSCRIBE 命令退订时,会将链表中的客户端删除,如果没有其他订阅者,则会删除字典中的键。

1.2 订阅模式

Redis 将订阅模式都存放在一个 list(pubsub_patterns) 里面,链表的每一项是一个 pubsubPattern对象,记录了被订阅的模式和订阅模式的客户端。

当有新的客户端订阅模式时,新增一个 pubsubPattern 结构,并加在链表的末尾。

模式的退订是删除链表中对应的 pubsubPattern 结构。

2 发送消息

2.1 发送频道订阅者

pubsub_channels 字典中找到频道的订阅者链表,然后将消息发送给每个订阅者。

2.2 发送模式订阅者

遍历整个 pubsub_patterns 链表,查找与 channel 频道匹配的模式,并将这些消息发送给订阅了这些模式的客户端。

3 订阅信息

3.1 PUBSUB CHANNELS

用于返回服务器当前被订阅的频道 PUBSUB CHANNELS [pattern]

3.2 PUBSUB NUMSUB

查看频道的订阅者数量 PUBSUB NUMSUB [channel-1 channel-2 ... channel-n]

3.2 PUBSUB NUMPAT

查看被订阅模式的数量 PUBSUB NUMPAT

上次编辑于:
贡献者: blacklad