当前位置: 首页 > news >正文

Redis 发布订阅 总结

前言


 相关系列

  • 《Redis & 目录》
  • 《Redis & 发布订阅 & 源码》
  • 《Redis & 发布订阅 & 总结》
  • 《Redis & 发布订阅 & 问题》
     

 参考文献

  • 《Redis发布订阅以及应用场景介绍》
     
     

概述


    Redis的发布/订阅机制是一种消息传递机制。与传统的发布/订阅机制相同,Redis的发布/订阅机制也由以下四部分组成:

  • message @ 消息:用于在客户端之间传递的内容;
  • producer/publisher @ 生产者/发布者:发布消息的客户端;
  • consumer/subscriber @ 消费者/订阅者:接收消息的客户端;
  • channel @ 频道:用于传递消息的桥梁/介质,发布者可通过频道发布消息,而订阅了频道的订阅者可接收到通过其发布的消息。

在这里插入图片描述
    Redis发布/订阅机制不会持久化消息。Redis的发布/订阅机制不会保存消息,因此在频道不存在/频道没有接收者时消息会直接被丢弃。此外即使有部分订阅者在宕机后又重复恢复,其也无法再接收到宕机期间发布的消息。

    Redis发布/订阅机制无需显式创建频道。Redis发布/订阅机制的频道会在首个订阅者订阅频道时自动创建,并在所有订阅者都退订时自动销毁,因此频道不存在与频道无订阅者在Redis发布/订阅机制中其实是一个概念。此外由于发布/订阅机制并不会保存消息,因此Redis也压根没有为频道创建具体的结构实例,仅仅只是为其保存/维护了一个频道名称/份订阅者名单而已。
 
 

使用


 发布

  • PUBLISH channel message:向指定频道发布指定消息。
        ------------------------- 入参 -------------------------
        channel @ 频道:消息发布的频道,订阅该频道的客户端可接收到消息,而频道不存在/无订阅者则指定消息直接丢失;
        message @ 消息:消息。
// ---- 向频道"a_1/a_2/b_3/c_4/d_5"发布消息"message",并返回接收到消息的订阅者总数"1/1/1/1/0"。
> PUBLISH a_1 message
1
> PUBLISH a_2 message
1
> PUBLISH b_3 message
1
> PUBLISH c_4 message
1
> PUBLISH d_5 message
0

 

 订阅

  • SUBSCRIBE channel [channel …]:订阅指定频道集,订阅后可收到通过指定频道集发布的消息。
        ------------------------- 入参 -------------------------
        channel [channel …] @ 频道集:渠道集,多个指定频道之间使用“ ”分割。
// ---- 订阅"a_1/a_2"频道,并返回成功订阅的频道总数"2"。
> SUBSCRIBE a_1 a_2
2
// ---- 频道"a_1"接收到消息"message"。
a_1
message
// ---- 频道"a_2"接收到消息"message"。
a_2
message
  • PSUBSCRIBE pattern [pattern …]:订阅指定的模式(频道)集,订阅后可收到通过指定模式集发布的消息。
        ------------------------- 入参 -------------------------
        pattern [pattern …] @ 模式集:模式集,使用“”作为全通配符,多个模式之间使用“ ”分割。*
// ---- 订阅符合"b_*/c_*"频道,并返回成功订阅的模式总数"2"。
> PSUBSCRIBE b_* c_*
2
// ---- 符合模式"b_*"的频道"b_3"接收到消息"message"。
b_*
b_3
message
// ---- 符合模式"c_*"的频道"c_4"接收到消息"message"。
c_*
c_4
message

 

 检查

  • PUBSUB CHANNELS [pattern]:获取符合指定模式的渠道集,不包含通过{PSUBSCRIBE}指令订阅的模式集。
        ------------------------- 入参 -------------------------
        [pattern] @ 模式:模式,使用“”作为全通配符。*
// ---- 获取符合模式"a_*"的渠道集,并返回渠道"a_1/a_2"。
> PUBSUB CHANNELS a_*
a_1
a_2
// ---- 获取符合模式"b_*"的渠道集,并未返回渠道,因为上文未订阅该模式的渠道集。
> PUBSUB CHANNELS b_*
  • PUBSUB NUMSUB [channel-1 …]:获取指定渠道集的订阅者总数,不包含通过{PSUBSCRIBE}指令订阅的模式集。
        ------------------------- 入参 -------------------------
        [channel-1 …] @ 渠道集:渠道集。
// ---- 获取渠道"a_1/a_2/b_*/c_*"的订阅者总数。
> PUBSUB NUMSUB a_1 a_2 b_* c_*
// ---- 渠道"a_1/a_2"的订阅者总数为"1/1"。
a_1
1
a_2
1
// ---- 渠道"b_*/c_*"的订阅者总数为"0/0",因为上文未订阅该渠道。
b_*
0
c_*
0
  • PUBSUB NUMPAT:获取已订阅的模式总数。
// ---- 获取已订阅的模式总数"2",即上文订阅的模式"b_*/c_*"。
> PUBSUB NUMPAT
2

 

 退订

  • PUNSUBSCRIBE [pattern …]:退订指定模式集。该指令可能因为客户端调用{PSUBSCRIBE}指令并进入监听状态而无法使用。
        ------------------------- 入参 -------------------------
        [pattern …] @ 模式集:模式集,使用“”作为全通配符,多个模式之间使用“ ”分割。不传则退订当前客户端使用{PSUBSCRIBE}指令订阅的所有模式。*
  • UNSUBSCRIBE [channel …]:退订指定渠道集。该指令可能因为客户端调用{SUBSCRIBE}指令并进入监听状态而无法使用。
        ------------------------- 入参 -------------------------
        [channel …] @ 渠道集:渠道集,多个渠道之间使用“ ”分割。不传则退订当前客户端使用{SUBSCRIBE}指令订阅的所有渠道。

http://www.mrgr.cn/news/62263.html

相关文章:

  • day20-yum精讲
  • jangow-01-1.0.1靶机
  • SAP PP CSAP_MAT_BOM_MAINTAIN ECN 替换组件
  • 【CSS in Depth 2 精译_096】16.4:CSS 中的三维变换 + 16.5:本章小结
  • 速度更快、功能更强 | Q-Tester V4.7工程诊断仪全新升级!
  • 喜报 | 擎创科技入围上海市优秀信创解决方案
  • 图像篡改研究
  • 未来生活中的AI电脑是怎样的
  • 【Python单元测试】pytest框架单元测试常用用例
  • Go性能基础
  • 【股东权益与市值:概念、计算与差异分析】
  • 关于防止布局底部有弹簧而导致的QWidget闪烁问题
  • 12-Docker发布微服务
  • STM32的隐藏定时器---DWT
  • 为什么大模型都是Decoder-only结构?
  • Python入门——iter迭代器—__iter__()方法__next__()方法
  • 详解RabbitMQ三种队列类型
  • Rust编程中的浮点数比较
  • 多线程显示 CSV 2 PNG 倒计时循环播放
  • Redis 淘汰策略 问题
  • leetcode hot100【LeetCode 230. 二叉搜索树中第K小的元素】java实现
  • DOM---鼠标事件类型(移入移出)
  • Java AQS Semaphore 源码
  • 天润融通突破AI客服局限,三大关键提升文本机器人问答效果
  • [SWPUCTF 2021 新生赛]easy_sql的write up
  • 虚拟机Ubuntu实现和宿主机之间的数据传输(只能复制粘贴,包过)