跳转至

Redis PubSub

时间: 2020-07-23 10:33:33

Redis PubSub 介绍#

Redis Pub/Sub 是 Redis 实现的发布订阅模式,用于解耦生产者和消费者。生产者向管道发送消息,不用关心消费者具体是谁,消费者从管道读取消息,不用关心发送者是谁。生产者和消费者只需要知道 Redis 的存在即可。

Redis Pub/Sub 的底层是 channel,不属于任何一个数据库。消费者只能获取到订阅之后的消息,订阅之前的消息,如果生产者发送消息的时候,没用消费之订阅 channel 消息将被丢弃。

发送者可以有一到多个,消费者也可以有一到多个。消费者订阅之后可以收到所有发送到管道中的消息。

常用命令#

  1. 订阅

    PSUBSCRIBE 订阅多个管道的时候,如果有多个规则匹配到消息的来源管道,消息会被接收多次。比如说:消费者订阅 c* ch* ch1,生产者向 ch1 发送一个消息,则消费者会收到三次消息,接收到消息唯一不同的地方是匹配的模式。SUBSCRIBE 则不会出现这种情况。

    # 订阅一个。ch1 是订阅的管道名称
    SUBSCRIBE ch1
    # 订阅一个。ch* 是订阅的管道名称, 接收发送到 ch* 的消息,*不是通配符。
    SUBSCRIBE ch*
    # 订阅多个。ch1 ch2 ch3 是订阅的管道名称
    SUBSCRIBE ch1 ch2 ch3
    # 订阅一个,通配符。ch* 是订阅的管道
    PSUBSCRIBE ch*
    # 订阅多个,通配符。ch* 和 pch* 是订阅的管道
    PSUBSCRIBE ch* pch*
    
  2. 发送消息

    # 发送消息 ch1 管道名字 a 发送的内容
    PUBLISH ch1 a
    
  3. 取消订阅

    # 取消订阅所有 
    UNSUBSCRIBE
    # 取消订阅指定渠道
    UNSUBSCRIBE ch1
    # 取消订阅,取消一个。通配符 ch.* 管道
    PUNSUBSCRIBE ch.*
    # 取消订阅,取消多个。通配符 ch.* psc* 管道
    PUNSUBSCRIBE ch.* psc*
    
    4. 查看管道状态

    # 查看当前正在使用的管道(当前正在被订阅的管道)
    PUBSUB CHANNELS *
    # 查看管道订阅者的数量,值返回SUBSCRIBE
    PUBSUB NUMSUB ch1
    # 查看所有被订阅的模式的数量
    PUBSUB NUMPAT