Skip to content

Redis发布订阅(Pub/Sub)

1. 简介

是一种消息通信模式:包含发布者(Publisher)、订阅者(Subscriber)和频道(Channel)。发布者向指定频道发送消息,订阅该频道的所有订阅者都会收到消息。Redis的Pub/Sub只实现最多一次的消息传递语义,这意味着消息只会传递一次。一旦Redis服务器发送了消息,就不可能再次发送。如果订阅者无法处理消息(例如,由于错误或网络断开,则消息将永远丢失。

2. 常用命令

2.1 SUBSCRIBE命令

格式:SUBSCRIBE channel [channel ..] 订阅给定的一个或多个频道的信息。推荐先执行订阅后再发布,订阅成功之前发布的消息是收不到的。

2.2 PUBLISH命令

格式:PUBLISH channel message 发布消息到指定的频道

2.3 PSUBSCRlBE命令

格式:PSUBSCRlBE pattern [pattern ...] 按照模式批量订阅,订阅一个或多个符合给定模式(支持*号?号之类的)的频道

2.4 PUBSUB命令

格式:PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态

  1. PUBSUB CHANNELS: 查询活跃频道组成的列表
  2. PUBSUB NUMSUB [channel [channel ...]]: 某个频道有几个订阅者
  3. PUBSUB NUMPAT: 只统计使用PSUBSCRIBE命令执行的,返回客户端订的唯一模式的数量

2.5 UNSUBSCRIBE命令

格式:UNSUBSCRIBE [channel [channel ...]] 取消订阅频道

2.6 PUNSUBSCRIBE命令

格式:PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道

3. Pub/Sub缺点

  1. 发布的消息在Redis系统中不能持久化。必须先执行订阅,再等待消息发布,如果先发布了消息,那么该消息由于没有订阅者消息将被直接丢弃。
  2. 消息只管发送对于发布者而言消息是即发即失的,不管接收,也没有ACK机制,无法保证消息的消费成功。

Redis5.0版本新增Stream数据结构,不但支持多播,还支持数据持久化,相比Pub/Sub更加的强大。