Redis学习笔记(六)Publish Subscribe

Redis还是一个稳定、快速的发布/订阅消息系统。订阅者可以订阅一个或多个他们感兴趣的channel,当发布者将消息发送到指定的channel中之后,订阅者就会收到消息。

1.发布/订阅

发布/订阅模式可以实现发布者和订阅者之间的解耦,提供了灵活的伸缩性和扩展性。比如,发布者将消息发布到指定的channel中,而不需要去关心有谁订阅了这个channel;同样地,订阅者订阅一个或多个他们所感兴趣的channel,却不用去关心有哪些发布者。

(1)订阅

Redis提供的SUBSCRIBE命令可以用来订阅一个或多个channel,命令格式如下所示:

比如,订阅foo:

其中,返回值是一个三元组的消息:”subscribe”表示成功订阅;”foo”表示订阅的channel名为foo;(integer) 1表示客户端目前订阅了多少个channel。

订阅之后,一旦有发布者将消息发布到foo中之后,订阅者将会收到相应的信息。需要注意的是,处于订阅状态中的客户端不应该再发出任何命令(如上示例,redis-cli客户端在订模式下不能接受任何命令,只能使用Ctrl-C退出订阅模式)。

(2)发布

使用PUBLISH命令,可以向指定channel中发布消息,命令格式如下:

比如,向foo中发布一条消息:

此时,订阅者将接收到以下信息:

其中,”message”表示接收到其他客户端使用PUBLISH命令发布的消息;”foo”表示此消息来源的channel;”hello world”则表示的是消息实体。

(3)取消订阅

取消订阅则使用UNSUBSCRIBE命令,命令格式:

2.模式匹配

还记得在RabbitMQ入门系列的教程中topic类型的交换器特性吗?Redis也实现了模式匹配功能,客户端通过模式匹配功能,可以实现个性化订阅。

(1)PSUBSCRIBE

使用PSUBSCRIBE命令可以实现模式匹配订阅功能,例如:

订阅所有符合“user.*”的channel,这样一来,发布到诸如user.info、user.warning等channel的消息都将会被此订阅者接收到。

(2)PUNSUBSCRIBE

该命令可以取消相应的模式匹配订阅:

需要注意的是,如果客户端同时使用SUBSCRIBE和PSUBSCRIBE命令订阅了同一个channel,那么订阅者将会接收到分别来自SUBSCRIBE订阅的channel发来的消息和PSUBSCRIBE订阅的channel发来的消息。

比如,订阅者这样订阅了channel:

那么,如果发布者将消息发布到foo中,订阅者就会接收两条消息体一样的消息。

3.其他

使用PUBSUB命令可以查看当前发布/订阅系统的状态。

(1)命令格式

(2)示例

查看当前发布/订阅系统的状态:

表示当前无任何客户端处于订阅状态,若将一个客户端进入订阅状态:

此时,再查看发布/订阅系统的状态:

表示当前channel名为foo的通道正在被订阅中。

 

参考:
https://redis.io/topics/pubsub

《Redis学习笔记(六)Publish Subscribe》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注