版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前⾯我们讲了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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新冠肺炎防控试题及答案
- 工程机械5-水泥混凝土布料机总体设计
- 市政道路安全生产应急预案
- 2026年山东聊城市高三一模高考历史试卷试题(答案详解)
- 175公司例会部门会议模板
- 发电部化学运行副班长安全责任制培训
- 2025《装在套子里的人》中社会变革的心理阻力课件
- 临时用电安全管理与规范操作培训
- 直流系统运行规程培训课件
- 安全副厂长(副经理)安全生产职责培训
- 甲状旁腺护理查房课件
- DB35-T 2142-2023 在用货车油箱柴油采样规程
- 固定式真空绝热压力容器定期检验
- GB 18279-2023医疗保健产品灭菌环氧乙烷医疗器械灭菌过程的开发、确认和常规控制要求
- 新能源汽车概论(中职新能源汽车专业)PPT完整全套教学课件
- 天津高考英语词汇3500
- 知木林乡知木林村传统村落环境保护项目环评报告
- 铁路建设项目甲供甲控物资设备目录
- 平衡皮肤生态环境2对于肌肤护理起到课件
- 茶与茶文化-红茶课件
- 《汽车电路识图》课程标准
评论
0/150
提交评论