当前位置:网站首页>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链表的长度来实现的,因为这个链表的长度就是服务器被订阅模式的数量,
边栏推荐
猜你喜欢

Deep learning - networks in networks and 1x1 convolution

Opencv4.2.0+vs2015 configuration

Use of nested loops and output instances

Is it difficult to jump job ByteDance? With these skills, you can easily pass
![November 22, 2021 [reading notes] - bioinformatics and functional genomics (Section 5 of Chapter 5 uses a comparison tool similar to blast to quickly search genomic DNA)](/img/de/7ffcc8d6911c499a9798ac9215c63f.jpg)
November 22, 2021 [reading notes] - bioinformatics and functional genomics (Section 5 of Chapter 5 uses a comparison tool similar to blast to quickly search genomic DNA)
![[nvme2.0b 14 - 5] commande de téléchargement / commande du logiciel](/img/98/bb250030f3e31e71d48e3be3ea4698.png)
[nvme2.0b 14 - 5] commande de téléchargement / commande du logiciel

Deep learning -- language model and sequence generation

Deep learning - bounding box prediction

Environment configuration of ROS Aubo manipulator

鲸探NFT数字臧品系统开发技术分享
随机推荐
tp5设置直接下载文件
【NVMe2.0b 14-5】Firmware Download/Commit command
Cesium learning notes (III) creating instances
深度学习——目标定位
Using typera+picgo to realize automatic uploading of markdown document pictures
Introduction to opencv (I): image reading and display
深度学习——循环神经网络
Dlib library blink
Lexicographic order -- full arrangement in bell sound
Deep learning - bounding box prediction
JS代码案例
【NVMe2.0b 14-5】Firmware Download/Commit command
1162 Postfix Expression
Development technology sharing of Jingtan NFT digital collection system
Wechat applet reports errors using vant web app
MySQL quotation sentence is unlocked: algorithm=insert, lock=none
Deep learning - LSTM
Palindrome substring, palindrome subsequence
Full stack performance testing theory - Summary
【JUC系列】Fork/Join框架之概览


