当前位置:网站首页>【redis】发布和订阅消息
【redis】发布和订阅消息
2022-08-10 23:50:00 【冰冷的希望】
1.说明
在Redis2版本之后支持发布订阅功能,发布者创建一个频道,并在上面发送消息,所有订阅该频道的客户端都能收到消息(不出意外的情况下,但实际不一定),发布订阅的好处是减少不必要的轮询,应用场景有即时聊天室、公众号订阅等。但Redis适合小型应用,如果是大型架构,相信还是会使用rabbitMQ或者kafka等更专业的MQ队列软件。
Redis-server内部会维护一个字典,键是频道名,值是一个存储订阅者的链表,每次发布消息都会遍历该链表进行推送。
2.订阅发布
我们打开一个redis终端,使用subscribe命令订阅频道,你不妨多打开几个终端同时订阅同一个频道,比如说我这里打开两个终端都订阅叫做chatChannel的频道
# 订阅格式:subscribe 频道名
127.0.0.1:6379> subscribe chatChannel
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "chatChannel"
3) (integer) 1
再打开一个终端,使用publish命令发布消息,这样订阅该频道的终端都会打印结果
# 发布格式:publish 频道名 消息
127.0.0.1:6379> publish chatChannel "hello"
(integer) 2
结果如下图
每个客户端是可以同时订阅多个频道的,即subscribe参数指定多个频道,另外也可以使用psubscribe命令订阅多个频道(好像称为模式),支持正则表达式
# 同时订阅 频道1、频道2、频道3
subscribe 频道1 频道2 频道3
# 订阅所有以“chat”开头的频道
psubscribe chat*
如果想要取消订阅的话可以使用unsubscribe和punsubscribe命令,用法是命令后面加上频道或匹配模式
3.代码实现
订阅消息,比如说订阅3次之后取消订阅
from redis import Redis
r = Redis(host='localhost', port=6379, db=0)
p = r.pubsub() # 如果不想接收其他一些信息可以把参数ignore_subscribe_messages改为True
p.subscribe("testChannel") # 如果想要同时订阅多个频道,可以传入多个参数
# p.psubscribe("test*") # 模式匹配
i = 0
while True:
msg = p.get_message()
if msg:
print("来电了: ", msg)
i += 1
if i > 2:
break
# 取消订阅
p.unsubscribe()
# p.punsubscribe()
p.close()
r.close()
发布消息比较简单
from redis import Redis
r = Redis(host='localhost', port=6379, db=0)
r.publish('testChannel', 'hello everybody')
r.close()
边栏推荐
- Timers, synchronous and asynchronous APIs, file system modules, file streams
- YOLOv5的Tricks | 【Trick11】在线模型训练可视化工具wandb(Weights & Biases)
- ROS实验笔记之——UZH-FPV数据集的验证
- SQL injection base - order by injection, limit, wide byte
- [C] the C language program design, dynamic address book (order)
- 3. 容器功能
- 2022下半年软考「高项」易混淆知识点汇总(2)
- 特殊类与类型转换
- 基于Web的疫情隔离区订餐系统
- PMP每日一练 | 考试不迷路-8.10(包含敏捷+多选)
猜你喜欢
“蔚来杯“2022牛客暑期多校训练营2 DGHJKL题解
Design and Realization of Employment Management System in Colleges and Universities
[Excel knowledge and skills] Convert "false" date to "true" date format
9. Rest style request processing
u盘数据不小心删除怎么恢复,u盘数据删除如何恢复
11. 自定义转换器
nodejs项目连接mysql数据库
16. File upload
10. Notes on receiving parameters
Jvm.分析工具(jconsole,jvisualvm,arthas,jprofiler,mat)
随机推荐
如果纯做业务测试的话,在测试行业有出路吗?
只会懒汉式和饿汉式 你还不懂单例模式!
鲜花线上销售管理系统的设计与实现
excel英文自动翻译成中文教程
Design and Realization of Employment Management System in Colleges and Universities
好用的翻译插件-一键自动翻译插件软件
Summary of Confused Knowledge Points for "High Items" in the Soft Examination in the Second Half of 2022 (2)
Call activity of Activiti7 sub-process
工程师如何对待开源
翻译软件哪个准确度高【免费】
Easy-to-use translation plug-in - one-click automatic translation plug-in software
多语种翻译-多语种翻译软件免费
PMP每日一练 | 考试不迷路-8.10(包含敏捷+多选)
iNFTnews | In the Web3 era, users will have data autonomy
[21天学习挑战赛——内核笔记](五)——devmem读写寄存器调试
Why do programming languages have the concept of variable types?
iNFTnews | Web3时代,用户将拥有数据自主权
promise详解
Multilingual Translation - Multilingual Translation Software Free
电脑桌面删除的文件回收站没有,电脑上桌面删除文件在回收站找不到怎么办