ITPub博客

首页 > 数据库 > NoSQL > redis续16-发布和订阅

redis续16-发布和订阅

原创 NoSQL 作者:a3zi 时间:2015-02-07 22:49:37 0 删除 编辑

发布订阅(pub/sub)是一种消息通信模式,主要的目的是解耦消息发布者和消息订阅者之间的耦合,这和设计模式中的观察者模式比较相似。

redis 将消息类型称为通道(channel)。当发布者通过publish 命令向redis server 发送特定类型的消息时。

原理是这样的:

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

发布者发布消息的命令是PUBLISH,例如:

redis>PUBLISH channel.1 hello

(integer) 0

PUBLISH命令的返回值表示接收到这条消息的订阅者数量。因为此时没有客户端订阅channel.1,所以返回0。

订阅频道的命令是SUBSCRIBE,可以同时订阅多个频道,用法是SUBSCRIBE  channel[channel …]。

现在新开一个redis-cli实例1,用它来订阅channel.1:

redis 1>SUBSCRIBE channel.1

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "channel.1"

3) (integer) 1

执行SUBSCRIBE命令后客户端会进入订阅状态,处于此状态下客户端不能使用除

SUBSCRIBE/UNSUBSCRIBE/PSUBSCRIBE/PUNSUBSCRIBE这4个属于“发布/订阅”模式的命令之外的命令,否则会报错。

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

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

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

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

上例中当实例1订阅了channel.1进入订阅状态后收到了一条subscribe类型的回复,这时我们打开另一个redis-cli实例2,并向channel.1发送一条消息:

redis 2>PUBLISH channel.1 hello!

(integer) 1

返回值为1表示有一个客户端订阅了channel.1,此时实例1 收到了类型为message的回复:

1) "message"

2) "channel.1"

3) "hello!"

 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29806344/viewspace-1429934/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: php解析域名问题
请登录后发表评论 登录
全部评论

注册时间:2014-08-15

  • 博文量
    45
  • 访问量
    228899