一、概述
发布/订阅模式包含两种角色,分别是发布者和订阅者。发布者可以向指定的频道发送消息;订阅者可以订阅一个或者多个频道,所有订阅此频道的订阅者都会收到此消息,图示
二、原理
底层是通过字典(图中的publish_channel)实现的,这个字典就用于保存订阅频道的信息:字典的键为正在被订阅的频道,而字典的值则是一个链表,链表中保存了所有订阅这个频道的客户端。
在下图展示的这个pubsub_channels的示例中,client2、client5、client1就订阅了channel1,而其他频道也被别的客户端所订阅
三、实现
常用命令
序号 |
命令及描述 |
1 |
PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道。 |
2 |
PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态。 |
3 |
将信息发送到指定的频道。 |
4 |
PUNSUBSCRIBE [pattern [pattern ...]] 退订所有给定模式的频道。 |
5 |
SUBSCRIBE channel [channel ...] 订阅给定的一个或多个频道的信息。 |
6 |
UNSUBSCRIBE [channel [channel ...]] 指退订给定的频道。 |
这里在cmd演示,如果是代码,原理一样
首先打开一个cmd订阅频道
redis 127.0.0.1:6379> SUBSCRIBE redisChat #创建了订阅频道名为 redisChat:
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "redisChat"
3) (integer) 1
再打开一个cmd发消息
redis 127.0.0.1:6379> PUBLISH redisChat "Hello,Redis"
(integer) 1
redis 127.0.0.1:6379> PUBLISH redisChat "Hello,hahaha"
(integer) 1
查看订阅者窗口收到消息
# 订阅者的客户端会显示如下消息
1) "message"
2) "redisChat"
3) "Hello,Redis"
1) "message"
2) "redisChat"
3) "Hello,hahaha"