《redis设计与实现》第四部分 (第18章 发布与订阅)

18 发布与订阅

  • 主要命令PUBLISH、SUBSCRIBE、PSUBSCRIBE等
  • 订阅频道:
    • 执行SUBSCRIBE,客户端可以订阅一个或多个频道,从而成为频道的订阅者
    • 有其他客户端向被订阅的频道发送消息时,频道的所有订阅者都会收到这条消息
  • 订阅模式
    • 执行PSUBSCRIBE,客户端可以订阅一个或者多个模式(类似于正则表达式),从而成为模式的订阅者
    • 有其他客户端向某个频道发消息时,消息不仅回传给频道的订阅者,还会发送给与频道匹配的模式的订阅者
    • 举例说明
      • A订阅了频道news.it
      • B订阅了频道news.et
      • C、D订阅了与频道news.it、news.et相匹配的模式new.[ie]t
      • E客户端PUBLISH “news.it” “nice”, ACD会收到
      • E客户端PUBLISH “news.et” “nice”, BCD会收到

18.1 频道的订阅与退订

  • 频道和客户端的关系保存在pubsub_channels变量中,key是频道的名字,value是客户端的list
//code0: server.h

typedef struct pubsubPattern {
    client *client;
    robj *pattern;
} pubsubPattern;

struct redisServer {
    //...
    dict *pubsub_channels;  /* channels a client is interested in (SUBSCRIBE) */
    list *pubsub_patterns;  /* patterns a client is interested in (SUBSCRIBE) */
    //...
}

18.2 模式的订阅与退订

  • 客户端执行PSUBSCRIBE命令订阅某个或某些模式的时候,会针对每一个订阅模式执行:
    • 新建pubsubPattern结构, pattern设置为被订阅的模式,client设置为订阅模式的客户端
    • 将pubsubPattern加到链表末尾

18.3 消息发送原理

  • 将消息发给频道订阅者:在pubsub_channels中找到订阅者,然后send
  • 将消息发给模式订阅者:遍历pubsub_patterns整个链表,找到与频道相匹配的模式,然后发送

18.4 PUBSUB命令的三个子命令

  • PUBSUB:可以用该命令查看频道或者模式的相关信息
    • PUBSUB CHANNELS [pattern]:返回符合pattern的所有频道
    • PUBSUB NUMSUM [channel-1 channel-2 … channel-n]: 返回频道订阅者的数量
    • PUBSUB NUMPAT:返回服务器当前被订阅模式的数量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值