发布订阅

核心知识点:

1.Redis提供简单的发布订阅功能,缺陷在于不能回溯、不能堆积消息。

2.命令

  a.publish:发布消息

  b.subscribe:订阅频道

  c.unsubscribe:取消订阅

  d.psubscribe/punsubscribe:模式订阅或取消订阅

  e.pubsub:查看活跃频道、查看频道订阅数、查看模式订阅数

 

 

Redis提供了基于“发布/订阅”模式的消息机制,此种模式下,消息发布者和订阅者不进行直接通信,

发布者客户端向指定的频道(channel)发布消息,订阅该频道的每个客户端都可以收到该消息。

下面会介绍一些相关命令:

1.发布消息

publish channel message

返回的结果为订阅者的个数,如果此时没有订阅,返回0:

127.0.0.1:6379> publish channel:sports "Kobe retired today"
(integer) 0

 

2.订阅消息

subscribe channel [channel ...]

订阅者可以订阅一个或者多个频道:

127.0.0.1:6379> subscribe channel:sports
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel:sports"
3) (integer) 1
...此处是等待中

在另一个客户端发布一条消息:

127.0.0.1:6379> publish channel:sports "The Timberwolves win the Lakers"  #森林狼大胜湖人
(integer) 1

当前订阅者会收到消息:

127.0.0.1:6379> subscribe channel:sports
Reading messages... (press Ctrl-C to quit)
...
1) "message"  #消息
2) "channel:sports"  #频道
3) "The Timberwolves win the Lakers"  #内容

有关订阅命令有两点需要注意:

(1)客户端在执行订阅命令之后进入订阅状态,只能接收subscribe、pubscribe、unsubscribe、pinsubscribe四个命令;

(2)新开启的订阅客户端,无法接收到该频道之前的消息,因为Redis不会对发布的消息持久化。

 

3.取消订阅

unsubscribe [channel [channel ...]]

客户端可以通过unsubscribe命令取消对指定频道的订阅,取消成功后,不会再收到该频道发布的消息:

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

 

4.按照模式订阅和取消订阅

psubscribe pattern [pattern ... ]
punsubscribe [pattern [pattern ... ]]

除了subscribe和unsubscribe命令,Redis还支持glob风格的订阅命令psubscribe和取消订阅命令punsubscribe:

127.0.0.1:6379> psubscribe w*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "w*"
3) (integer) 1

 

5.查询订阅

(1)查看活跃的频道

pubsub channels [pattern]

 所谓活跃的频道是指当前频道至少有一个订阅者,其中[pattern]是可以指定具体的模式:

127.0.0.1:6379> pubsub channels
1) "write"
2) "water"

 

(2)查看频道的订阅数

pubsub numsub [channel ... ]

返回某一个频道的订阅数:

127.0.0.1:6379> pubsub numsub write
1) "write"
2) (integer) 1  #订阅数为1

 

(3)查看模式订阅数

pubsub numpat

所有的模式订阅也可以视作模糊订阅,就是使用subscribe来订阅频道的用户。

127.0.0.1:6379> pubsub numpat  #当前没有模式订阅的用户
(integer) 0

 

虽然和很多专业的消息队列系统(Kafka、RocketMQ)相比,Redis的发布订阅略显粗糙,功能也有些简单,例如不支持消息堆积和回溯

但是胜在足够简单,如果当前场景可以容忍这些缺点,也是一个不错的选择。

 

posted @ 2018-01-03 13:41  明王不动心  阅读(361)  评论(0编辑  收藏  举报