在 Redis 5.0 Stream 没出来之前,消息队列的实现方式都有着各自的缺陷,例如:

  • 发布订阅模式 PubSub,不能持久化也就无法可靠的保存消息,并且对于离线重连的客户端不能读取历史消息的缺陷;
  • 列表实现消息队列的方式不能重复消费,一个消息消费完就会被删除;
  • 有序集合消息队列的实现方式不能存储相同 value 的消息,并且不能阻塞读取消息。

并且以上三种方式在实现消息队列时,只能存储单 value 值,也就是如果你要存储一个对象的情况下,必须先序列化成 JSON 字符串,在读取之后还要反序列化成对象才行,这也给用户的使用带来的不便,基于以上问题,Redis 5.0 便推出了 Stream 类型也是此版本最重要的功能,用于完美地实现消息队列,它借鉴了 Kafka 的设计思路,它支持消息的持久化和消息轨迹的消费,支持 ack 确认消息的模式,让消息队列更加的稳定和可靠。

接下来我们先来了解 Stream 自身的一些特性,然后在综合 Stream 的特性,结合 Java 代码完整的实现一个完美的消息队列示例。

基础使用

Stream 既然是一个数据类型,那么和其他数据类型相似,它也有一些自己的操作方法,例如:

  • xadd 添加消息;
  • xlen 查询消息长度;
  • xdel 根据消息 ID 删除消息;
  • del 删除整个 Stream;
  • xrange 读取区间消息
  • xread 读取某个消息之后的消息。

具体使用如下所述。

添加消息

消息队列终极解决方案——Stream(上)相关推荐

  1. 消息队列终极解决方案——Stream(下)

    在开始使用消息分组之前,我们必须手动创建分组才行,以下是几个和 Stream 分组有关的命令,我们先来学习一下它的使用. 消息分组命令 创建消费者群组 127.0.0.1:6379> xgrou ...

  2. 别再用 Redis List 实现消息队列了,Stream 专为队列而生

    使用 Redis 的 List 实现消息队列有很多局限性,比如: 没有良好的 ACK 机制: 没有 ConsumerGroup 消费组概念: 消息堆积. List 是线性结构,想要查询指定数据需要遍历 ...

  3. springboot使用redis实现消息队列功能,redis使用list和stream实现消息队列功能,redis实现消息队列的风险点分析

    文章目录 写在前面 基于list的消息队列解决方案 使用list基本实现消息队列 阻塞式消费,避免性能损失 替换while(true) 实现消息幂等 保证消息可靠性 基于stream的消息队列解决方案 ...

  4. redis灵魂拷问:如何使用stream实现消息队列

    redis在很早之前就支持消息队列了,使用的是PUB/SUB功能来实现的.PUB/SUB有一个缺点就是消息不能持久化,如果redis发生宕机,或者客户端发生网络断开,历史消息就丢失了. redis5. ...

  5. Redis进阶-Stream多播的可持久化的消息队列

    文章目录 Pre Stream简介 Stream特性 消息 ID 消息内容 命令预览 独立消费 创建消费组 消费 Stream 消息积压怎么处理 消息如果忘记 ACK 会怎样? PEL 如何避免消息丢 ...

  6. 基于消息队列的分布式事务解决方案

    前两天发了工资,第一反应是想着要给远方的女朋友一点惊喜!于是打开了平安银行的APP给女朋友转点钱!填写上对方招商银行卡的卡号.开户名,一键转账!搞定!在我点击的那瞬间,就收到了app的账户变动的提醒, ...

  7. Redis 消息队列的三种方案(List、Streams、Pub/Sub)

    现如今的互联网应用大都是采用 分布式系统架构 设计的,所以 消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段,它具有 低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 当前使用较多 ...

  8. 计算发送延时与传播延迟_消息队列——延时消息应用解析及实践

    简介:在大部分场景下业务系统如果只需要实现异步解耦.削峰填谷等能力,常规的普通消息就可以满足此类需求.除此之外,在某些特殊的业务场景中,普通消息类型存在无法满足需求的情况.这就需要消息队列服务本身支持 ...

  9. 实战干货:基于Redis6.0 部署迷你版本消息队列

    点击关注公众号,实用技术文章及时了解 技术研究背景 由于目前的研发团队处于公司初创阶段,尚未有能成熟的运维体系,对于市面上常见的成熟MQ搭建维护能力不足,但是又希望能有一款轻量级的消息系统供研发团队的 ...

最新文章

  1. 开发者们的迷茫期,该怎么看破?
  2. python横向柱状图-python画柱状图--不同颜色并显示数值的方法
  3. Https 与 SSl证书 概要
  4. FreeBSD基本命令[转]
  5. CoreAnimation —— CAReplicatorLayer(拷贝图层)
  6. sql server 迁移 mysql_sql server 迁移到 mysql
  7. 数据--第23课 - 队列的优化实现
  8. 10 Love Quotes Touch Your Soul at First Sight
  9. word文档怎么批量解除锁定_解除锁定的word文档的方法
  10. font-family
  11. 秦九韶算法计算机实现
  12. web版Project简介
  13. html设置type选择器,css :first-of-type选择器实例讲解
  14. .net core Fleck WebSocket使用笔记
  15. 【今日CV 计算机视觉论文速览 第101期】Wed, 17 Apr 2019
  16. 计算机性能指标ppt,计算机网络—评价网络的性能指标知识讲解.ppt
  17. 平面设计中的网格系统pdf_【200421】平面设计必看书籍超越平凡的设计平面设计中的网格系统等|电子书资源免费分享...
  18. 入坑codewars
  19. 基于javaweb仓库理系统设计与实现进销存管理.rar(论文+毕业设计+源码+答辩PPT)
  20. 下载视频-you-get

热门文章

  1. Portainer简介及部署
  2. 什么是分布式系统的CAP理论?
  3. Problem F: 结构体--学生信息排序
  4. 【Java】PMD规则学习(1) --字符串比较
  5. 同时对view延时执行两个动画时候的现象
  6. UNIX-LINUX编程实践教程-第三章-实例代码注解-ls2
  7. 招几个兄弟和我一起做项目
  8. python地图标注_Python 给定的经纬度标注在地图上的实现方法
  9. Mybatis源码之缓存模块分析
  10. 解决the resource is not on the build path of a java project