简介
Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以收到该消息(频道没有”创建“的概念,可以直接订阅、亦可直接发布消息)。
命令
发布消息
PUBLISH
自2.0.0可用。
**时间复杂度:**O(N+M),其中
N
是频道channel
的订阅者数量,而M
则是使用模式订阅(subscribed patterns)的客户端的数量。
语法:PUBLISH channel message
说明:
将信息 message
发送到指定的频道 channel
。
返回值:
接收到信息 message
的订阅者数量。
示例:
# 向没有订阅者的频道发送信息
coderknock> PUBLISH new_channel "test publish"
(integer) 0
# 向有订阅者的频道发送信息
coderknock> PUBLISH channel1 "new channel1"
(integer) 1
订阅
SUBSCRIBE
自2.0.0可用。
**时间复杂度:**O(N),其中
N
是订阅的频道的数量。
语法:SUBSCRIBE channel [channel …]
说明:
订阅给定的一个或多个频道的信息。
返回值:
接收到的信息(请参见下面的代码说明)。
示例:
coderknock> SUBSCRIBE channel1
Reading messages... (press Ctrl-C to quit)
# 订阅成功
1) "subscribe" # 返回值的类型:显示订阅成功
2) "channel1" # 订阅的频道名字
3) (integer) 1 # 目前已订阅的频道数量
# 接收到信息
1) "message" # 返回值的类型:信息
2) "channel1" # 来源(从哪个频道发送过来)
3) "new channel1" # 信息内容
#### PSUBSCRIBE
自2.0.0可用。
**时间复杂度:**O(N),
N
是订阅的模式的数量。
语法:PSUBSCRIBE pattern [pattern …]
说明:
订阅一个或多个符合给定模式的频道。
每个模式以 *
作为匹配符,比如 it*
匹配所有以 it
开头的频道( it.news
、 it.blog
、 it.tweets
等等), news.*
匹配所有以 news.
开头的频道( news.it
、 news.global.today
等等),诸如此类。
返回值:
接收到的信息(请参见下面的代码说明)。
示例:
coderknock> PSUBSCRIBE news.* coderknock.*
Reading messages... (press Ctrl-C to quit)
# 订阅成功
1) "psubscribe" # 返回值的类型:显示订阅成功
2) "news.*" # 订阅的频道名字
3) (integer) 1 # 目前已订阅的频道数量
1) "psubscribe"
2) "coderknock.*"
3) (integer) 2
# 接收到信息
1) "pmessage" # 返回值的类型:信息
2) "news.*" # 来源频道模式
3) "news.123" # 具体频道(从哪个频道发送过来)
4) "123 # 消息
1) "pmessage"
2) "news.*"
3) "news.222