14. Redis 发布订阅-实现消息队列

àì夳堔傛蜴生んèń 2022-02-02 09:55 379阅读 0赞

Redis 除了做缓存, 也可以做消息队列, 实现简单的消息的发布和订阅。Redis 消息订阅支持精确订阅和模糊订阅两种模式!

1. Redis 消息队列

1.1 Redis 消息队列特点

  • 当有新消息发布时, 所有订阅的客户端全部接受到消息。
  • Redis 订阅channel时,支持模糊匹配
  • 当新的客户端订阅时,之前的消息不会被重复接受

1.2 常用命令









































操作命令 命令格式 描述
publish publish $ch $msg 发布消息, 一次只能向一个channel发布一条消息
subscribe subscribe $ch1 $ch2… 订阅频道, 可同时订阅多个频道。不支持模糊匹配
psubscribe psubscribe $chPattern1 $chPattern2… 订阅频道, 可同时订阅多组频道, 支持模糊匹配
pubpub pubsub … args … 监测pub/sub系统相关状态
punsubscribe 命令行不支持, ctrl+c 退出订阅
unsubscribe 命令行不支持, ctrl+c 退出订阅

2. 命令测试

2.1 订阅消息

打开两个客户端,同时监听两个频道ch1 和 ch2

  1. $ redis-cli
  2. 127.0.0.1:6379> SUBSCRIBE ch1 ch2
  3. Reading messages... (press Ctrl-C to quit)
  4. 1) "subscribe"
  5. 2) "ch1"
  6. 3) (integer) 1
  7. 1) "subscribe"
  8. 2) "ch2"
  9. 3) (integer) 2

2.2 模糊订阅

新起三个客户端, 实现模糊订阅频道 ch*

  1. $ redis-cli
  2. 127.0.0.1:6379> PSUBSCRIBE ch*
  3. Reading messages... (press Ctrl-C to quit)
  4. 1) "psubscribe"
  5. 2) "ch*"
  6. 3) (integer) 1

2.3 发布消息

分别向频道ch1 和 ch2 发送消息.

  1. $ redis-cli
  2. 127.0.0.1:6379> PUBLISH ch1 hello
  3. (integer) 2
  4. 127.0.0.1:6379> PUBLISH ch2 hi
  5. (integer) 2

2.3 查看消息

当发布消息时, 会发现五个客户端均有消息输出, 但是对于精确订阅和模糊订阅两种方式, 接收到的消息体略有不同.

2.3.1 精确订阅输出

  1. 1) "message"
  2. 2) "ch1"
  3. 3) "hello"
  4. 1) "message"
  5. 2) "ch2"
  6. 3) "hi"

2.3.2 模糊订阅接收消息体

  1. 1) "pmessage"
  2. 2) "ch*"
  3. 3) "ch1"
  4. 4) "hello"
  5. 1) "pmessage"
  6. 2) "ch*"
  7. 3) "ch2"
  8. 4) "hi"

2.4 查看监听状态

2.4.1 查看所有精确监听的channel名称

  • 支持模糊匹配进行过滤
  • 只能查看采用精确方式订阅的channel名称, 不能查看模糊方式订阅的channel

    127.0.0.1:6379> PUBSUB channels
    1) “ch1”
    2) “ch2”

    127.0.0.1:6379> PUBSUB channels ch*
    1) “ch1”
    2) “ch2”

2.4.2 查看精确订阅具体channel 的客户端数量

  • 不支持模糊匹配
  • 结果只包含精确订阅的客户端数量, 不包含模糊订阅的客户端数量

    127.0.0.1:6379> PUBSUB numsub ch1
    1) “ch1”
    2) (integer) 2

2.4.3 查看模糊订阅的数量

  1. 127.0.0.1:6379> PUBSUB numpat
  2. (integer) 3

发表评论

表情:
评论列表 (有 0 条评论,379人围观)

还没有评论,来说两句吧...

相关阅读