十四、Redis进阶-Redis“发布/订阅”模式

作者: 温新

分类: 【Redis】

阅读: 2559

时间: 2020-09-02 15:19:53

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

Redis中提供了一组命令可以轻松实现“发布/订阅”模式。“发布/订阅”模式可以实现进程间的消息传递,原理如下:

发布订阅模式中包含两种角色,分别是发布者和订阅者。订阅者可以订阅一个或多个频道(channel),发布者可以向指定的频道发送消息,所有订阅此频道的订阅者都会接收到此消息。

发布订阅命令

psubscribe 订阅一个或多个频道

​ 语法:psubscribe pattern [pattern ...]

每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等)。 news.* 匹配所有以 news. 开头的频道( news.it 、 news.global.today 等等)

pubsub 查看订阅与发布系统状态

​ 语法:pubsub subcommand [arg [arg ...]]

publish 将信息发送到指定的频道

127.0.0.1:6379> publish channel1.1 hello
(integer) 0

该命令返回接收到这条消息的订阅者数量。

​ 语法:publish channel message

punsubscribe 定退所有给定模式的频道

​ 语法:punsubscribe [pattern [pattern ...]]

unsubscribe 退订给定的一个或多个频道的信息

​ 语法:unsubscribe [channel [channel ...]]

subscribe 订阅给定的一个或多个频道

​ 语法:subscribe channel [channel ...]

# 新开窗口B
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel.1"
3) (integer) 1
1) "message"
2) "channel.1"
3) "hello world"

# 窗口A
127.0.0.1:6379> publish channel.1 'hello world'
(integer) 1

进入订阅后的客户端可能收到3种类型的回复。每种类型的回复都包含3个值,第一个值是消息的类型,根据消息类型的不同,第二、三个值的含义也不同。消息类型可能的取值有以下3个:

1)subscribe表示订阅成功的反馈消息。第二值是订阅成功的频道名称,第三个值是当前客户端的频道数量。

2)message这是我们最需要关心的类型,表示接收到的消息。第二值表示产生消息的频道名称,第三个值是消息的内容。

3)unsubscribe表示成功取消订阅某个频道。第二个值是对应的频道名称,第三个值是当前客户端订阅的频道数量,当值为0时客户端会退出订阅状态,之后就可以执行其他非“发布/订阅”模式的命令。

按照规则订阅

新开窗口C

# 窗口C
127.0.0.1:6379> psubscribe channel.?*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "channel.?*"
3) (integer) 1


# 窗口A 发布消息
127.0.0.1:6379> publish channel.1 'hi qin'
(integer) 2

# 窗口C接收
127.0.0.1:6379> psubscribe channel.?*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "channel.?*"
3) (integer) 1
1) "pmessage"
2) "channel.?*"
3) "channel.1"
4) "hi qin"

请登录后再评论