版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前⾯我们讲了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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026 年护生书写护理计划能力训练带教主题
- 2026 年心血管科高血压合并冠心病护理个案
- 新疆维吾尔自治区和田地区2027年高三3月份模拟考试物理试题(含答案解析)
- 农村宅基地自建房租赁协议 乡村农家乐经营专用合同
- 2025-2026学年江苏省南通市港闸区数学三下期末调研模拟试题(含答案解析)
- 户外广告牌夏季防风加固安全课件
- 季度施工现场安全管控培训
- 下半年安全生产责任落实方案
- 跨境智算中心电算协同中跨国算力绿电调度国际投资仲裁-基于国际投资争端解决中心规则与算力绿电调度跨境投资争议仲裁规范分析
- 跨境算力中心与深远海风电协同中跨国海缆冗余算力调度-基于国际深远海风电运维协会算力中心海缆冗余调度指南规范分析
- (高清版)DB11∕T2250-2024重点用能单位能耗在线监测系统接入技术规范
- DB33T 2113-2018 公路沥青路面超薄磨耗层施工技术规范
- 医院培训课件:《新生儿支气管肺发育不良》
- 工厂汛期防汛应急预案
- 智能安防行业发展建议
- 2024山东高考英语完形填空联考模拟试题汇编(含答案详解)
- 工程振动试验分析(教材)
- 洗涤公司车间管理制度
- 器械辨认及用途课件
- GA/T 1105-2013信息安全技术终端接入控制产品安全技术要求
- FZ/T 01116-2012纺织品磁性能的检测和评价
评论
0/150
提交评论