当前位置:网站首页>Redis设计与实现(七)| 发布 & 订阅
Redis设计与实现(七)| 发布 & 订阅
2022-06-30 08:06:00 【光看不点赞】
文章目录
发布与订阅
- 概述
Redis的发布与订阅功能由
PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。
通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者( subscriber ):每当有其他客户端向被订阅的频道发送消息(message)时,频道的所有订阅者都会收到这条消息。
- 命令使用
# 如果三个客户端都执行了这个,那么三个客户端都是这个频道的订阅者
SUBSCRIBE "news.it"
# 某个客户端发送这个,那么三个订阅者都会收到
PUBLISH "news.it" "hello"

- PSUBSCRIBE
这个命令可以让客户端订阅一个模式或多个模式,
假设如下图A订阅it,B订阅et,C、D订阅一个ie模式,那么向it频道发送消息,C、D也会收到,通配符中?表示一个占位符,*表示任意个占位符(包括0个),?*表示一个以上占位符
# PSUBSCRIBE可以订阅一个或多个模式,类似于通配符
PSUBSCRIBE "news.?t"

1.频道的订阅和退订
- 概述
订阅同一频道的客户端会在
redisServer结构中以链表的形式放在pubsub_channels的字典中,如下图
1.1 订阅频道
- 加入字典,会遍历输入的所有频道
- 加入频道的对应键,如果不存在该频道,那么必然不存在键,所以会先在字典中添加键
- 如果存在频道,那么直接加入队尾
1.2 退订
- 概述
这个动作就是刚才订阅动作的逆序
UNSUBSCRIBE "频道1" "频道2"
2.模式的订阅和退订
- 概述
模式订阅和退订会在redisServer的pubsub_patterns属性中,同样也是一个链表,每个节点的结构为pubsubPattern
- 实例
2.1 订阅模式
- 步骤
- 新建一个pubsubPattern结构,将结构的pattern属性设置为被订阅的模式,client属性设置为订阅模式的客户端。
- 将pubsubPattern结构添加到pubsub_patterns链表的表尾。
2.2 退订
- 概述
模式的退订命令
PUNSUBSCRIBE是 PSUBSCRIBE命令的反操作:当一个客户端退订某个或某些模式的时候,服务器将在pubsub_patterns链表中查找并删除那些pattern属性为被退订模式,并且client属性为执行退订命令的客户端的pubsubPattern结构。
3.发送消息
- 概述
当一个Redis客户端执行
PUBLISH <channel> <message>命令将消息message发送给频道channel的时候,服务器需要执行以下两个动作:
- 将消息message发送给channel频道的所有订阅者。
- 如果有一个或多个模式pattern与频道channel相匹配,那么将消息message发送给pattern模式的订阅者。
4.查看订阅消息
- 概述
PUBSUB命令是Redis 2.8新增加的命令之一,客户端可以通过这个命令来查看频道或者模式的相关信息,比如某个频道目前有多少订阅者,又或者某个模式目前有多少订阅者,诸如此类。
4.1 PUBSUB CHANNELS
- 概述
PUBSUB CHANNELS <pattern>,子命令用于返回服务器当前被订阅的频道,其中pattern是可选的
- 不给定模式,那么返回所有被订阅的频道
- 给定模式,那么就符合模式的所有频道
4.2 PUBSUB NUMSUB
- 概述
PUBSUB NUMSUB [channel-1 -2 ...-n]子命令,返回对应频道的订阅者数,底层就是通过遍历字典对应的频道名,对应的链表长度
4.3 PUBSUB NUMPAT
- 概述
PUBSUB NUMPAT子命令用于返回服务器当前被订阅模式的数量。这个子命令是通过返回pubsub patterns链表的长度来实现的,因为这个链表的长度就是服务器被订阅模式的数量,
边栏推荐
- [JUC series] overview of fork/join framework
- 深度学习——循环神经网络
- 全栈最全性能测试理论-总结
- 想问问,炒股怎么选择证券公司?网上开户安全么?
- 【NVMe2.0b 14-5】Firmware Download/Commit command
- C. Fishingprince Plays With Array
- [nvme2.0b 14 - 5] commande de téléchargement / commande du logiciel
- C. Fishingprince Plays With Array
- 【NVMe2.0b 14-6】Format NVM、Keep Alive、Lockdown command
- 亚马逊测评术语有哪些?
猜你喜欢

Construction of energy conservation supervision system for campus buildings of ankery University

深度学习——卷积的滑动窗口实现

HelloWorld

Deep learning -- recurrent neural network

Lexicographic order -- full arrangement in bell sound

Cesium learning notes (VI) particle system

AcrelEMS能效管理平台为高层小区用电安全保驾护航

Deep learning -- Realization of convolution by sliding window

【花雕体验】13 搭建ESP32C3之PlatformIO IDE开发环境

领域驱动下cloud项目中单个服务的示例
随机推荐
mysql无法连接内网的数据库
全栈最全性能测试理论-总结
Opencv video
What are the Amazon evaluation terms?
Miracle Mu server rental selection is real and easy to use, stable and intrusion proof
领域驱动下cloud项目中单个服务的示例
What management improvements can CRM bring to enterprises
How to handle the expired data of redis and what are the elimination mechanisms?
Experiment 2 LED button PWM 2021/11/15
【JUC系列】Fork/Join框架之概览
[nvme2.0b 14 - 5] commande de téléchargement / commande du logiciel
Game 280 problem2: minimum operands to turn an array into an alternating array
1163 Dijkstra Sequence
Conversion between basic data types in go data types
F12抓包用于做postman接口测试的全过程解析
【NVMe2.0b 14-5】Firmware Download/Commit command
Want to ask, how to choose securities companies for stock speculation? Is it safe to open an account online?
【NVMe2.0b 14】NVMe Admin Command Set
多快好省,低门槛AI部署工具FastDeploy测试版来了!
Deep learning - goal orientation


