消息队列的Redis实现

不同的程序之间需要有序的信息交换,消息队列就是其中的渠道,它连接着上游和下游。

上游是生产者或发布者,下游是消费者或订阅者。

消息队列有有两种模式:

一种是生产-消费模式:生产者把消息放在队列中,多个消费者监听队列,但只能有一个消费者抢走消息。

一种是发布-订阅模式。发布者把消息放在队列中,多个订阅者都会收到同一份消息。

Redis本身具有发布订阅功能。其缺陷是消息不能存储,不能重发。如果订阅者断线,那么重连之后,断线期间发布的消息无法获得。UPOS项目最初采用这种方式发布规则文件,除了上述缺点,当规则文件较大时(印象中是>5M),数据传输会占用较大带宽,这样发布订阅过程极不稳定。后来把规则文件直接存储在redis中(含版本号),定时去检查版本号,如果发现更新的规则文件,就会更新。

Redis的数据结构list作为生产消费模式的消息队列。

list操作命令是RPOP,LPOP,RPUSH,LPUSH,BRPOP,BLPOP。最后两个是阻塞命令,必须有timeout。

这种方案的缺点是,如果消费者拿到消息之后崩溃,那么恢复之后不可能重新拿到消息。

BRPOPLPUSH source destination timeout

这种方案的改进版本是使用命令RPOPLPUSH / BRPOPLPUSH,这样被取出的消息存储在另一个列表中(备份)。等消费者处理完消息之后,再从备份列表中删除。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,982评论 19 139
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,038评论 2 89
  • 基于内存的NoSQL数据库。提供五种数据结构的存储。字符串、列表、集合、有序集合、散列表。Redis 支持很多特性...
    韩绝交阅读 727评论 0 1
  • 我只是路上迷路的孩子罢了 不需要带我回家 擦肩而过时,给我一个温暖的微笑 就好 我只是路上迷路的孩子罢了 不需要为...
    陌九黎阅读 216评论 0 0
  • 作为一名软妹子,一定要在男生面前展现出自己喜欢小动物或者喜欢一个可爱的卡通人物,才能够获得他们的赞赏与青睐,因为只...
    我叫snailzz阅读 682评论 0 1