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 ...]]
查看订阅与发布系统状态
PUBSUB CHANNELS
: 查询活跃频道组成的列表PUBSUB NUMSUB [channel [channel ...]]
: 某个频道有几个订阅者PUBSUB NUMPAT
: 只统计使用PSUBSCRIBE命令执行的,返回客户端订的唯一模式的数量
2.5 UNSUBSCRIBE命令
格式:UNSUBSCRIBE [channel [channel ...]]
取消订阅频道
2.6 PUNSUBSCRIBE命令
格式:PUNSUBSCRIBE [pattern [pattern ...]]
退订所有给定模式的频道
3. Pub/Sub缺点
- 发布的消息在Redis系统中不能持久化。必须先执行订阅,再等待消息发布,如果先发布了消息,那么该消息由于没有订阅者消息将被直接丢弃。
- 消息只管发送对于发布者而言消息是即发即失的,不管接收,也没有ACK机制,无法保证消息的消费成功。
Redis5.0版本新增Stream数据结构,不但支持多播,还支持数据持久化,相比Pub/Sub更加的强大。