版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前⾯我们讲了Redis消息队列的使⽤⽅法,但是没有提到Redis消为了⽀持消息多播,Redis不能再依赖于那5种基本数据类型了。PubSub,也就是 使⽤Python语⾔来演示⼀下PubSub如何使⽤。#-*-coding:utf-8-*-importtimeimportclient=redis.StrictRedis()p=client.pubsub()printp.get_message()client.publish("codehole","javacomes")printp.get_message()client.publish("codehole","pythoncomes")printp.get_message()printNone,'subscribe','data':None,'message','data':None,'message','codehole','data':'python客户端发起订阅命令后,Redis会⽴即给予⼀个反馈消息通知订阅成get\_message才能拿到反馈消息。客户端接下来执⾏publish命令get\_message才能拿到发布的消息。如果当前没有消息,get\_message会返回空,告知当前没有RedisPubSub⼦实际上使⽤了两个Redis的连接。这是必须的,因为Redis不允许连接在subscribe等待消息时还要进⾏其它的操作。##-*-coding:utf-8-*-importtimeimportclient=redis.StrictRedis()p=client.pubsub()whileTrue:msg=p.get_message()ifnotmsg:print##-*-coding:utf-8-*-importredisclient=redis.StrictRedis()client.publish("codehole","pythoncomes")client.publish("codehole","javacomes")client.publish("codehole","golangpubsub{{'pattern':None,'type':'subscribe','channel':'codehole','data':1L}{'pattern':None,'type':'message','channel':'codehole','data':'pythoncomes'}{'pattern':None,'type':'message','channel':'codehole','data':'javacomes'}{'pattern':None,'type':'message','codehole','data':'golang上⾯的消费者是通过轮询get_message来收取消息的,如果收取不到就休眠1s。这让我们想起了第3节的消息队列模型,我们使⽤blpop来代替休眠来提⾼消息处理的及时性。PubSub的消费者如果使⽤休眠的⽅式来轮询消息,也会遭遇消息处理不及时的问题。不过我们可以使⽤listen来阻塞监听消息来进⾏处理,这点同blpop原理是⼀样的。下⾯我们改造⼀下消费者##-*-coding:utf-8-*-importtimeimportclient=redis.StrictRedis()p=client.pubsub()formsginprint明确指定主题的名称。如果我们想要订阅多个主题,那就subscribesubscribecodehole.imagecodehole.textcodehole.blogsubscribecodehole.imagecodehole.textcodehole.blog同时订阅三个主题,会有三条订阅成功反馈(integer)(integer)(integer)publishcodehole.imagepublishcodehole.image(integer)1publishcodehole.text你好,欢迎加⼊码洞(integer)publishcodehole.blog'{"content":"hello,everyone","title":"welcome"}'(integer)为了简化订阅的繁琐,redis提供了模式订阅功能Patternpsubscribepsubscribecodehole.*#⽤模式匹配⼀次订阅多个主题,主题以codehole.字符开头的消息都可以收到(integer){{'pattern':None,'type':'subscribe','channel':'codehole','data':1L}{'pattern':None,'type':'message','channel':'codehole','data':'pythoncomes'}{'pattern':None,'type':'message','channel':'codehole','data':'javacomes'}{'pattern':None,'type':'message','codehole','data':'golangsubscribe,如果是模式订阅的反馈,它的类型就是psubscribe,还有取消订阅指令的反馈unsubscribe和punsubscribe。PubSubPubSub的⽣产者传递过来⼀个消息,Redis会直接找到相应的消费如果Redis停机重启,PubSubRedis正是因为PubSub有这些缺点,它⼏乎找不到合适的应⽤场景。所以Redis的作者单独开启了⼀个项⽬Disque专⻔⽤来做多播消息Beta版本,但是相应的客户端sdk已经⾮常丰富了,就待Redis作者临⻔⼀脚发布⼀个Release版本。关于Disque的更多细节,本⼩册不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年教育产业投资顾问合同范本3篇
- 2024年某废弃物处理场土方填埋与环保监管合同
- 2024全新数字化厂房产权置换及技术服务合同3篇
- 2024年度数据合规管理协议2篇
- 2024年度虚拟现实游戏开发合作合同范本132篇
- 2024版办公楼物业精细化管理及能耗降低委托合同2篇
- 2024年物流公司项目经理合同3篇
- 2024年度酒店改造升级项目投资合作合同范本3篇
- 2024年度水泥行业创新发展基金合同
- (投资方案)冷柜玻璃项目可行性研究报告
- (正式版)JBT 5300-2024 工业用阀门材料 选用指南
- 【教案】2023年全国高考数学新课标Ⅱ卷第11题说题稿
- 一例压力性损伤的个案护理
- 河南省郑州市2023-2024学年高二上学期期期末生物试题【含答案解析】
- 经方论治冠心病九法
- 《体育校本课程的建设与开发》课题研究实施方案
- 抵制不健康读物“读书与人生”
- (医学课件)带状疱疹PPT演示课件
- 特种设备使用单位落实使用安全主体责任监督管理规定(第74号)宣贯
- 人工智能与生命科学融合
- 小学生愤怒情绪管理策略
评论
0/150
提交评论