当前位置: 首页 > news >正文

Redis 5.0中的 Stream是什么?

Redis Stream 数据结构详解

Redis Stream 是 Redis 5.0 版本引入的新型数据结构,专门用于处理有序、可追溯的消息流。其核心特性包括消息持久化、有序性以及消费者组支持,使其成为构建可靠消息系统的理想选择。

基本概念与特性

Stream 本质上是一个有序消息日志,每条消息都具有唯一 ID 并按添加顺序严格排列。开发者可以执行以下操作:

  • 消息的发布与消费
  • 消息删除管理
  • 实时消息订阅
  • 消费者组协同处理

核心优势(相较于 Pub/Sub)

  1. 消息持久化:克服了传统 Pub/Sub 消息易丢失的缺陷,支持网络中断/服务重启后的数据恢复
  2. 主备复制:确保全时段数据可访问性
  3. 消费位置记忆:精确记录各客户端消费进度

典型应用场景

  • 消息队列系统
  • 实时日志收集
  • 即时数据处理
  • 在线聊天室

核心特性详解

1. 消息有序性

所有消息严格按发布时间排序,消费者按时间顺序处理

2. 多消费者支持

  • 竞争式消费:多个消费者争抢消息处理
  • 共享式消费:消费者协同处理消息流

3. 持久化机制

服务异常重启后仍可完整恢复历史消息

4. 消息分组

通过消费组实现灵活的消息分配策略

实现原理

底层结构

采用类日志的存储方式:

  • 每个 Stream 包含若干日志段
  • 日志段由多个消息组成
  • 消息包含:唯一ID、时间戳、消息体等元数据

关键命令

  • 消息流相关命令(生产者 & 查询)
    命令作用示例
    XADD添加消息XADD mystream * name 张三 age 18
    XTRIM修剪流,限制长度XTRIM mystream MAXLEN 1000
    XDEL删除消息XDEL mystream 1607524047165-0
    XLEN获取消息数量XLEN mystream
    XRANGE获取消息(正向)XRANGE mystream - + COUNT 10
    XREVRANGE获取消息(反向)XREVRANGE mystream + - COUNT 10
    XREAD读取消息(非组方式)XREAD COUNT 10 STREAMS mystream 0

    消费者组相关命令(消费者)
    命令作用示例
    XGROUP CREATE创建消费者组XGROUP CREATE mystream mygroup $ MKSTREAM
    XREADGROUP GROUP消费组读消息XREADGROUP GROUP mygroup c1 STREAMS mystream >
    XACK标记消息已处理XACK mystream mygroup 1607524047165-0
    XGROUP SETID设置起始消费IDXGROUP SETID mystream mygroup 0
    XGROUP DELCONSUMER删除消费者XGROUP DELCONSUMER mystream mygroup c1
    XGROUP DESTROY删除消费者组XGROUP DESTROY mystream mygroup
    XPENDING查看待确认消息XPENDING mystream mygroup
    XCLAIM声明消息归属权(例如超时后转移)XCLAIM mystream mygroup c2 60000 1607524047165-0

    查看信息
    命令作用示例
    XINFO STREAM查看流状态XINFO STREAM mystream
    XINFO GROUPS查看所有消费者组XINFO GROUPS mystream
    XINFO CONSUMERS查看某个组下消费者XINFO CONSUMERS mystream mygroup

工作流程

  1. 消息发布:通过自动生成ID(自然序/UUID)写入日志
  2. 消费处理
    • 消费者通过XREAD(GROUP)获取消息
    • 使用XACK确认处理完成
  3. 消费组协同
    • 组内消费者独立维护消费偏移量
    • 支持消息重投机制处理超时/失败场景
http://www.dtcms.com/a/293264.html

相关文章:

  • C语言(20250722)
  • 21. `taskSlotTable`和`jobLeaderService`启动
  • 使用空间数据训练机器学习模型的实用工作流程
  • An error occurred at line: 1 in the generated java file问题处理及tomcat指定对应的jdk运行
  • Dify工作流:爬虫文章到AI知识库
  • 【OD机试】数组和最大
  • Java基础环境配置
  • 从零开始学习大模型之文本数据处理
  • BEV-LaneDet
  • 网络编程---网络基础知识
  • 【文本分析】使用LDA模型进行主题建模——李牧南等(2024)《科研管理》、马鸿佳等(2025)《南开管理评论》的复现
  • 24. 两两交换链表中的节点
  • 线程池excutor 和 submit区别 关于异常处理,请详细说明,会吞掉异常吗,需要捕获吗
  • vue3:十八、内容管理-实现行内图片的预览、审核功能
  • Python--numpy基础知识
  • 海洋大地测量基准与水下导航系列之九我国海洋PNT最新技术进展(中)
  • Qt开发环境搭建全攻略(Windows+Linux+macOS)
  • 14.8 LLaMA2-7B×Dolly-15K实战:从准确率63%到89%,如何用优质数据让大模型性能飙升42%?
  • 17-VRRP
  • 汉诺塔问题
  • 阿里Seata事务模式场景化选型指南
  • Java学习-------事务失效
  • 第二章 JS进阶 【5. Date(日期对象)】
  • 坑机介绍学习研究
  • Linux 使用 screen 窗口会话稳定挂载jar包到后台运行
  • 【图像认知与处理】OpenCV基础学习
  • 每日数据推荐:成都市AOI面数据
  • 疯狂星期四文案网第15天运营日记
  • 【langchain】3分钟构建一个上下文聊天机器人
  • 高可用架构模式——FMEA方法(排除架构可用性隐患的利器)