一、概述

发布/订阅模式包含两种角色,分别是发布者和订阅者。发布者可以向指定的频道发送消息;订阅者可以订阅一个或者多个频道,所有订阅此频道的订阅者都会收到此消息,图示

redis消息订阅_redis

二、原理

底层是通过字典(图中的publish_channel)实现的,这个字典就用于保存订阅频道的信息:字典的键为正在被订阅的频道,而字典的值则是一个链表,链表中保存了所有订阅这个频道的客户端。

在下图展示的这个pubsub_channels的示例中,client2、client5、client1就订阅了channel1,而其他频道也被别的客户端所订阅

redis消息订阅_链表_02

三、实现

常用命令

序号

命令及描述

1

​PSUBSCRIBE pattern [pattern ...]​

订阅一个或多个符合给定模式的频道。

2

​PUBSUB subcommand [argument [argument ...]]​

查看订阅与发布系统状态。

3

​PUBLISH channel message​

将信息发送到指定的频道。

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"