技术分享
🗒️Redis中的消息发布订阅
00 分钟
2021-9-20
2023-8-6
type
status
date
slug
summary
tags
category
icon
password

什么是发布订阅模式

首先我们需要了解什么是发布订阅模式(Publish–Subscribe Pattern)。
Wiki百科如是说道:
在软件架构中,发布-订阅是一种消息传递模式,其中消息的发送者(称为发布者)不会将消息编程为直接发送给特定的接收者(称为订阅者),而是将已发布的消息分类到不知道哪些订阅者的情况下。 类似地,订阅者表示对一个或多个频道感兴趣并且只接收感兴趣的消息,而不知道有哪些发布者。
发布-订阅是消息队列范式的兄弟,通常是更大的面向消息的中间件系统的一部分。 大多数消息传递系统在其 API 中同时支持发布/订阅和消息队列模型; 例如,Java 消息服务 (JMS)。
这种模式提供了更大的网络可扩展性和更动态的网络拓扑,从而降低了修改发布者和发布数据结构的灵活性。

Redis中的发布订阅

在Redis中,以下命令
实现了发布订阅模式
例如,对于SUBSCRIBE命令,可以通过运行如下命令来订阅频道,后面可以接一个或者多个频道名
取消订阅命令,与订阅命令一致,也可以接一个或者多个频道名
当有客户端发送消息到这些频道时,Redis将会推送传入的消息给所有订阅这些频道的客户端。
正在订阅频道的客户端不应该发送除了订阅或取消订阅以外的命令。订阅和退订操作的执行结果以消息的形式返回,客户端可以读取收到消息的第一个元素来区分收到的是消息类型,还是订阅和退订操作执行结果。
进入订阅模式后,订阅客户端只能执行以下命令:
📌
注意:在>=6.2 版本才能使用 RESET 命令
下图为实例的实际效果
notion image

推送消息的格式说明

消息是一个带有三个元素的Array Reply
第一个元素只能是下面三种之一:
  • subscribe: 表示成功订阅到以第二个返回元素命名的频道。第三个元素表示客户端当前订阅频道总数。
  • unsubscribe: 表示成功退订以第二个返回元素命名的频道。第三个元素表示客户端当前订阅频道总数。当第三个参数为零的时候,表示客户端已退出Pub/Sub状态,不再订阅任何频道,可以发送订阅和退订以外的Redis 命令。
  • message: 表示收到其它某一个客户端用 PUBLISH 发布的消息,第二个元素是来源频道的名字,第三个参数是消息实际内容。

实际效果

客户端1——发布者
notion image
客户端2——订阅者
notion image
可以看到,发布者在channel1 与 channel 2频道各发送了两条信息,订阅者因为订阅两个频道,接收到四条信息。四个Array Reply。

带有模式匹配的订阅

可以看到,只是在SUBSCRIBE以及UNSUBSCRIBE前面增加了一个P,这里的P就是Pattern的意思,使用方法同SUBSCRIBE以及UNSUBSCRIBE,只是传参为Pattern模式
  • PSUBSCRIBE
    • PSUBSCRIBE pattern [pattern ...]
    • 订阅符合模式的对应的频道,支持glob
      • h?llo subscribes to hello, hallo and hxllo
      • h*llo subscribes to hllo and heeeello
      • h[ae]llo subscribes to hello and hallo, but not hillo
  • PUNSUBSCRIBE
    • PUNSUBSCRIBE [pattern [pattern ...]]
    • 取消订阅符合模式的对应的频道,如果为空,则取消所有

实现Redis中的发布订阅模式

订阅者
发布者
同时运行两个客户端代码
在【发布者】的命令行中输入消息
notion image
在【订阅者】的命令行中可以看到收到了消息
notion image
发布者在频道eachen_radio上发布消息,订阅者在同一个频道上接受消息
上一篇
【翻译】《A Quick Guide to Go's Assembler》
下一篇
Redis使用Pipeline提高查询速度

评论
Loading...