1

什么是发布订阅

Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道。

角色

  • 发布者(publisher)
  • 订阅者(subscriber)
  • 频道 (channel)

订阅一个频道

图片描述

订阅多个频道

图片描述

常用命令

publish channel message

  • 发布命令

subscribe [channel ...]

  • 订阅一个或多个频道

unsubscribe [channel ...]

  • 取消订阅一个或多个频道

示例

  • 订阅者1客户端 (订阅channel:1频道)
127.0.0.1:6379> subscribe channel:1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:1"
3) (integer) 1
  • 订阅者2客户端 (订阅 channel:1 和 channel:2 两个频道)
127.0.0.1:6379> subscribe channel:1 channel:2
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:1"
3) (integer) 1
1) "subscribe"
2) "channel:2"
3) (integer) 2

  • 发布者客户端 - 向 channel:1 频道发布内容
127.0.0.1:6379> publish channel:1 hello
(integer) 2 # 订阅者个数,说明有两个订阅者订阅该频道。
  • 订阅者1客户端 - 收到发布内容
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:1"
3) (integer) 1
1) "message"
2) "channel:1"
3) "hello"
  • 订阅者2客户端 - 收到发布内容
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:1"
3) (integer) 1
1) "subscribe"
2) "channel:2"
3) (integer) 2
1) "message"
2) "channel:1"
3) "hello"

  • 发布者客户端 - 向 channel:2 频道发布内容
127.0.0.1:6379> publish channel:2 world
(integer) 1 # 订阅者个数,说明有1个订阅者订阅该频道。
  • 订阅者1客户端 - 未收到发布内容
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:1"
3) (integer) 1
1) "message"
2) "channel:1"
3) "hello"
  • 订阅者2客户端 - 收到发布内容
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:1"
3) (integer) 1
1) "subscribe"
2) "channel:2"
3) (integer) 2
1) "message"
2) "channel:1"
3) "hello"
1) "message"
2) "channel:2"
3) "world"

其他API

1. psubscribe [pattern...]

  • 订阅正则表达式匹配的频道

2. punsubscribe [pattern...]

  • 退订正则表达式匹配的频道

3.pubsub channels

  • 列出至少有一个订阅者的频道

4.pubsub numsub [channel...]

  • 列出给定频道的订阅者数量

白菜1031
5.4k 声望1.6k 粉丝