Redis Pub/Sub

如何在redis中使用发布/订阅

redis 使用 publish,subscribe,unsubscribe实现发布订阅消息。
Pub/Sub 的消息将被发送一次,一旦redis服务发送了消息,就不能再次发送。如果订阅者无法处理该消息,该消息将丢失。
如果不想丢失消息,则可以使用redis stream,stream中的消息是持久的,并且支持最多一次,和至少一次。

推送消息的格式

所有订阅接收的消息有三种类型:subscribe,unsubscribe,message

所有订阅接收的消息格式有3个元素组成
第一元素是消息类型(subscribe),第二元素是频道名称(mychanel1),第三个元素是已订阅频道的数量(1)

  • subscribe
    注意执行此命令的客户端将进入阻塞,等待接收消息,不可做其他操作。
    建议先执行订阅再执行发布,因为只会接收到订阅后到信息。
    在这里插入图片描述

  • unsubscribe
    在这里插入图片描述

  • message
    在这里插入图片描述
    当一客户端 执行publish mychannel1 hello,订阅mychannel1频道的客服端将会收到以上消息。 与上面两种类型不同的是,第三个元素是消息的内容。

模式订阅

  1. psubscribe
    模式订阅
    例如
    PSUBSCRIBE news.*
    将收到发送到news.art.figurative、news.music.jazz等频道的所有消息。
  2. punsubscribe
    PUNSUBSCRIBE news.*
    将取消订阅该模式的客户端

模式订阅和频道订阅的消息

如果客户端订阅了与已发布的消息匹配的多个模式,或者订阅了与消息匹配的模式和频道,则客户端可能会多次收到一条消息。以下示例显示了这一点:

SUBSCRIBE foo
PSUBSCRIBE f*

在上述示例中,如果消息发送到channel foo,客户端将收到两条消息:一条是message类型,另一条pmessage类型。

pubsub 查看订阅发布的状态

pubsub channels : 查看活跃的频道
pubsub numsub : 查看平道有几个订阅者
pubsub numpat :只统计使用psubcribe订阅的订阅者数量

发布消息

publish命令发送消息,返回值为收到该消息的订阅者数量。
在这里插入图片描述

publish 如何将消息给各个订阅者呢?

其实redis处理方式很简单,只是一直维护的这些订阅者的长连接请求。

在服务端看来,客服端发来的subcribe指令与普通指令无差别,服务端收到指令后,会加一个flag 标签,之后便将这个连接信息(频道信息)存在特殊的结构中,等待的publish指令的到来

当服务端收到publish指令后,会匹配相应的频道,再将消息推送给对应的客服端,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值