# 一:前言
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.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
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
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 三:参考文献
- 《Redis深度历险:核心原理和应用实践 - 钱文品》
- 《Redis 开发与运维 - 付磊、张益军》
- 官方文档 (opens new window)