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 设置起始消费ID XGROUP 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. 消费组协同 :
    • 组内消费者独立维护消费偏移量
    • 支持消息重投机制处理超时/失败场景
相关推荐
XLYcmy13 分钟前
信息检索报告数字经济赋能城市低碳治理的路径研究——基于“传统数据库 + 生成式人工智能”双轮驱动的检索实践 检索实施与结果分析 Web of Science
数据库·ai·llm·prompt·ssci·deepseek·wos
Decay__17 分钟前
21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比
运维·数据库·sql·mysql·架构
codigger1 小时前
MySQL 深分页优化:limit 100000, 10 慢在哪,怎么救
数据库·sql·mysql·程序员
麦壳饼1 小时前
SonnetDB 5.0 正式发布:增强 SQL 与事务,开放九模型 MCP 读写
数据库·人工智能·sql·sonnetdb
IT规划师3 小时前
Redis 数据类型全解 - Bitfield:99% 开发者没用过的位域操作,把内存再砍 80%(七)
redis·bitfield·位域
Decay__11 小时前
18_MySQL 智能巡检方案 —— 巡检项清单 / 一键巡检脚本 / 健康评分
运维·数据库·sql·mysql·架构
java_logo11 小时前
Docker 部署 Liquibase:轻松搭建数据库变更管理
数据库·docker·容器·数据库管理·liquibase·轩辕镜像·数据库变更
凤凰院凶涛QAQ12 小时前
《MySQL内核拆解:从SQL到InnoDB》(四) : 联合查询 & 视图
数据库·sql·mysql
码农小河6612 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库