首页 > 其他 > 详细

redis - 订阅与发布

时间:2020-04-20 16:24:02      阅读:77      评论:0      收藏:0      [点我收藏+]

发布与订阅

结构

  • 发送者 - 频道 - 订阅者
    • 一个频道可以有多个订阅者
    • 一个订阅者可以订阅多个频道

优势

  • 发布者和订阅者解耦,提高拓展性
  • 动态网络拓扑
  • 可以多个订阅者消费同一消息

命令

  • 发送者

    • 发布:PUBLISH

      # 发送者-发布
      redis> PUBLISH 频道 消息
      # 订阅者-接收
      1) "message"  -- 模式
      2) "second"   -- 频道名称
      3) "hello"    -- 信息
      
      1) "pmessage" -- 模式
      2) "test*"   -- 匹配模式
      3) "test1" -- 匹配到的频道名称
      4) "hello"    -- 信息
      
  • 订阅者

    • 订阅:SUBSCRIBE

      # 订阅者-订阅
      redis> SUBSCRIBE 频道1 频道2
      # 订阅者-返回
      1) "subscribe" -- 模式
      2) "test"     -- 频道名称
      3) (integer) 1 -- 当前客户端订阅频道数
      
    • 取消订阅:UNSUBSCRIBE

      # 订阅者-取消订阅
      redis> UNSUBSCRIBE 频道1
      # 订阅者-返回
      1) "unsubscribe" -- 模式
      2) "test"       -- 频道名称
      3) (integer) 1   -- 当前客户端剩余订阅频道数
      
      - ubsubsrcibe不加任何参数时取消所有订阅
      
    • 匹配订阅:PSUBSCRIBE

      # 订阅者-订阅
      redis> SUBSCRIBE 正则形式频道,支持*、?、[...]等
      
    • 取消匹配订阅:PUNSUBSCRIBE

      # 订阅者-取消订阅
      redis> PUNSUBSCRIBE 正则形式频道
      
  • 同一频道多次匹配

    • 订阅多个模式匹配了同一个频道, 互不干扰,会多次接收到信息

      # 订阅者订阅
      redis> PSUBSCRIBE test* test1
      # 发布者发布
      redis> PUBLISH test1 ‘content‘
      # 订阅者接收
      1) "pmessage" 
      2) "test1"
      3) "test1"
      4) ‘content‘
      
      1) "pmessage" 
      2) "test*"
      3) "test1"
      4) ‘content‘
      

实际使用

  • 多个进程使用同一端口的redis,部分为发送者,部分为订阅者
  • 客户端可以用哈希表关联 特定来源 和处理该来源的 回调函数
    • 信息到达时,在 O(1) 复杂度内, 将信息交给正确的回调函数处理
  • 多服务器/进程订阅同一端口同一频道,进行同一调配

易混淆点

  • 发布订阅:单端口多实例,集群:多端口
  • 发布订阅:一个消息多处消费,消息队列:一个消息只能消费一次
  • 订阅频道后不能进行操作,订阅数为0退回成普通可操作redis

redis - 订阅与发布

原文:https://www.cnblogs.com/yangjunh/p/redis-subscribe.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!