Redis 之三:Redis 的发布订阅(pub/sub)

概念介绍

Redis 发布订阅 (pub/sub) 是一种消息通信模式,它允许客户端之间进行异步的消息传递

Redis 客户端可以订阅任意数量的频道。

模型中的角色

在该模型中,有三种角色:

  1. 发布者(Publisher) :负责发送信息的客户端,使用 PUBLISH 命令将消息发送到指定的频道(channel)。

    复制代码
    PUBLISH channel message

    发布者不关心是否有订阅者正在监听该频道。

  2. 订阅者(Subscriber) :通过调用 SUBSCRIBEPSUBSCRIBE 命令来监听一个或多个频道的消息。

    复制代码
    SUBSCRIBE channel1 channel2 ... channelN
    PSUBSCRIBE pattern1 pattern2 ...
    • SUBSCRIBE 用于订阅特定频道名称。
    • PSUBSCRIBE 则用于订阅满足给定模式的频道,例如通配符模式。
  3. 频道(Channels):消息传递的通道,每个频道都有自己的名称,所有向这个频道发布的信息都会被订阅了该频道的所有订阅者接收到。

特性

  • 发布订阅是异步的单向通信机制,发布者与订阅者之间没有直接的连接。
  • 订阅者只能接收订阅之后发布的消息,不能获取历史消息。
  • Redis Pub/Sub 是一个简单的消息队列解决方案,但不适合需要持久化消息或者保证消息可靠传递的场景,因为如果订阅者在消息发布期间断开连接,则会丢失该消息。

因此,Redis 的发布订阅功能适用于实时消息通知、事件驱动编程以及轻量级的消息队列应用场景。

下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 ------ client2 、 client5 和 client1 之间的关系:

当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:

具体操作

1)订阅频道

开启多个客户端: redis-cli

订阅一个频道(创建和开启频道)

复制代码
127.0.0.1:6379> subscribe WDZL
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "WDZL"
3) (integer) 1
##### 订阅和开启了一个频道 WDZL

再开启一个客户端,执行上面相同的操作,订阅同一个频道

共计开启2个以上客户端。

2)查询频道

然后再在第三个客户端去查询活跃的频道

复制代码
PUBSUB CHANNELS       # pubsub channels 为关键字
PUBSUB CHANNELS ch*   # 名字匹配  
PUBSUB NUMSUB ch2     # 打印订阅ch2频道的客户端订阅的所有模式的数量总和

查询活跃的频道

复制代码
127.0.0.1:6379> pubsub channels
1) "BWL"
2) "WDZL"

查询指定频道的订阅数量

复制代码
127.0.0.1:6379> pubsub numsub BWL
1) "BWL"
2) (integer) 2
3)发布消息

发布订阅消息: publish

复制代码
127.0.0.1:6379> publish BWL Hello,Welcome!
(integer) 2
#### 显示发布成功接收的数量

再到订阅者客户端查看是否收到消息

复制代码
127.0.0.1:6379> subscribe BWL    
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "BWL"
3) (integer) 1     # 客户端一旦订阅后,就会进入阻塞状态,等待消息。不能做其他操作了
1) "message"
2) "BWL"
3) "Hello,Welcome!"
相关推荐
原来是猿9 分钟前
MySQL 在 Centos 7环境安装
数据库·mysql·centos
路小雨~14 分钟前
Milvus 向量数据库的官方文档笔记
数据库·学习·milvus
老衲提灯找美女15 分钟前
数据库约束
数据库
卷Java20 分钟前
Python字典:键值对、get()方法、defaultdict,附通讯录实战
开发语言·数据库·python
wanhengidc23 分钟前
跨境云手机适用于哪些场景
大数据·运维·服务器·数据库·科技·智能手机
Bdygsl1 小时前
MySQL(6)—— 视图
数据库·mysql
oradh1 小时前
数据库入门概述
数据库·oracle·数据库基础·数据库入门
BullSmall1 小时前
一套定制化高级 payload 合集
数据库·安全性测试
zbdx不知名菜鸡1 小时前
postgre sql 数据库查询优化
数据库·postgresql
9稳2 小时前
基于PLC的生产线自动升降机设计
开发语言·网络·数据库·嵌入式硬件·plc