Redis PubSub

9/21/2021 Redis

# 一:前言

Redis主要提供了发布消息、订阅频道、取消订阅以及按照模式订阅和取消订阅等命令。Redis 单独使用了一个模块来支持消息多播,这个模块的名字叫着 PubSub,也就是 PublisherSubscriber,发布者订阅者模型。

# 二:使用

  • publish channel message:发布消息,返回结果为订阅者个数
  • subscribe channel [channel ...]:订阅消息,订阅者可以订阅一个或多个频道
  • unsubscribe [channel [channel ...]]:取消订阅
  • psubscribe pattern [pattern...]:按照模式订阅
  • punsubscribe [pattern [pattern ...]]:按照模式取消订阅
  • pubsub channels [pattern]:查看活跃的频道,所谓活跃的频道是指当前频道至少有一个订阅者,其中[pattern]是可以 指定具体的模式
  • pubsub numsub [channel ...]:查看频道订阅数
  • pubsub numpat:查看模式订阅数

# 2.1 发布消息

> publish channel:sports "Tim won the championship"
(integer) 0
1
2

# 2.2 订阅消息

同时打开两个客户端,客户端A和客户端B

## 客户端A
> subscribe channel:sports
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:sports"
3) (integer) 1

## 客户端B
> publish channel:sports "James lost the championship"
(integer) 1

## 客户端A 结果是追加在上一次结果后面的形式
> subscribe channel:sports
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:sports"
3) (integer) 1
1) "message"
2) "channel:sports"
3) "James lost the championship"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

  • 客户端在执行订阅命令之后进入了订阅状态,只能接收 subscribe、 psubscribe、unsubscribe、punsubscribe 的四个命令
  • 新开启的订阅客户端,无法收到该频道之前的消息,因为Redis不会对 发布的消息进行持久化

# 2.3 取消订阅

> unsubscribe channel:sports
1) "unsubscribe"
2) "channel:sports"
3) (integer) 0
1
2
3
4

# 2.4 按照模式订阅和取消订阅

操作订阅以it开头的所有 频道

> psubscribe it*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "it*"
3) (integer) 1
1
2
3
4
5

# 2.5 查询订阅

## 查看活跃频道
> pubsub channels
1) "channel:sports" 
2) "channel:it" 
3) "channel:travel" 

> pubsub channels channel:*r*
1) "channel:sports" 
2) "channel:travel"

## 查看频道订阅数
> pubsub numsub channel:sports
1) "channel:sports" 
2) (integer) 2

## 查看模式订阅数
> pubsub numpat 
(integer) 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 三:参考文献

最后更新: 3/8/2022, 5:05:45 PM