Redis Stream基本使用及应用场景

ops/2025/3/1 5:38:18/

一、概念

Redis Streams是Redis5.0提供的一种消息队列机制,支持多播的可持久化的消息队列,用户实现发布订阅的功能,借鉴了kafka设计。

二、常用命令

命令名称描述
XADD key ID field value [field value ...]添加一条消息
  • key:Stream 的名称;
  • ID:消息的唯一标识符,可以使用 * 自动生成;
  • field value:消息的内容,以键值对的形式存储。
XREAD [COUNT count] STREAMS key [ID]

从一个或多个 Stream 中读取消息。

  • COUNT:限制返回的消息数量(可选);
  • STREAMS:指定要读取的 Stream 键;
  • ID:指定从哪个消息 ID 开始读取($ 表示只读取新消息,0 表示从头开始读取)。
XREADGROUP GROUP group consumer [COUNT count] STREAMS key [ID]

从消费者组中读取消息。

  • GROUP:指定消费者组名称;
  • consumer:指定消费者名称;
  • ID:通常使用 > 表示只读取未消费的消息。
XGROUP CREATE key groupname ID

创建一个新的消费者组。

  • key:Stream 的名称;
  • groupname:消费者组名称;
  • ID:指定消费者组从哪个消息 ID 开始消费($ 表示从最新消息开始)。
XGROUP DESTROY key groupname删除一个消费者组
XGROUP SETID key groupname ID修改消费者组的起始消费位置
XACK key groupname ID [ID ...]

确认消息已被成功处理。

  • key:Stream 的名称。
  • groupname:消费者组名称。
  • ID:需要确认的消息 ID。
XPENDING key groupname查看消费者组中未确认的消息统计信息
XPENDING key groupname start end count [consumer]查看具体的未确认消息列表
XDEL key ID [ID ...]

删除指定的消息。

  • key:Stream 的名称。
  • ID:需要删除的消息 ID。
XTRIM key MAXLEN [=|~] threshold

控制 Stream 的长度,删除旧消息。

  • MAXLEN:设置最大长度。
  • =:严格模式,保留指定数量的消息。
  • ~:近似模式,可能保留比指定数量稍多的消息。
XINFO STREAM key获取 Stream 的基本信息
XINFO GROUPS key获取 Stream 的所有消费者组信息
XINFO CONSUMERS key groupname获取消费者组中的所有消费者信息
XLEN sms_stream查看Stream长度

三、应用场景

采用Redis Streams 实现短信发送队列的异步处理,替代传统List列表无数据轮询模式,降低系统资源消耗。

角色定义

  • 生产者:短信网关服务,将待发送短信封装为消息写入Redis Stream。

  • 消费者组:多个短信处理节点(Consumer Group),每个节点负责消费部分消息。

  • 消息格式:使用Protobuf序列化消息体,包含手机号、内容、模板ID等字段。

1.Redis命令实现

生产者通过XADD命令写入Stream

XADD sms_stream * mobile "13800138000" content "您的验证码是1234" template_id "T1001"

消费者通过XREADGROUP阻塞读取消息

XREADGROUP GROUP sms_group consumer1 COUNT 1 BLOCK 5000 STREAMS sms_stream >

消息处理成功后发送XACK确认

XACK sms_stream sms_group "1678905140000-0"

消费者组初始化

XGROUP CREATE sms_stream sms_group $ MKSTREAM

消息重试机制,Pending List处理:定时扫描未ACK的消息(超过30秒未确认),重新投递

local pending = XPENDING sms_stream sms_group - + 10
for each message in pending doXCLAIM sms_stream sms_group consumer2 30000 <message-id>
end

限制Stream最大长度(避免内存溢出)

 四、与传统轮询模式对比
维度传统轮询(List/LPOP)Redis Streams
资源消耗高频空轮询消耗CPU/网络阻塞读取,无消息时挂起,降低30% CPU
消息可靠性无ACK机制,消息可能丢失支持ACK+Pending List,确保至少一次投递
吞吐量单消费者约5万条/秒消费者组多节点并行,可达20万条/秒
功能扩展仅基础队列支持多消费者组、消息回溯、阻塞读取

http://www.ppmy.cn/ops/162145.html

相关文章

IOS基础面试题

1. 什么是MVC&#xff1f; MVC&#xff08;Model-View-Controller&#xff09;是一种常见的设计模式&#xff0c;用于组织代码 Model&#xff08;模型&#xff09;&#xff1a; 代表数据层&#xff0c;处理数据的逻辑。View&#xff08;视图&#xff09;&#xff1a; 负责展示…

C++和OpenGL实现3D游戏编程【连载23】——几何着色器和法线可视化

欢迎来到zhooyu的C++和OpenGL游戏专栏,专栏连载的所有精彩内容目录详见下边链接: 🔥C++和OpenGL实现3D游戏编程【总览】 1、本节实现的内容 上一节课,我们在Blend软件中导出经纬球模型时,遇到了经纬球法线导致我们在游戏中模型光照显示问题,我们在Blender软件中可以通过…

AI“势头超猛”: 深圳走出怎样的步伐?

何为“耐心资本”&#xff1f; 就是引导资本做“时间的朋友”&#xff0c;不受短期市场波动的干扰&#xff0c;陪伴硬科技、科学家与创业者“长跑”。对于战略性新兴产业而言&#xff0c;早期的发展都离不开大量的资金投入&#xff0c;用来维持持续的创新和研发工作。 在今年两…

SpringBoot整合SpringSecurity、MyBatis-Plus综合实例:认证、授权

Spring Security 安全框架,系列文章: 《SpringSecurity创建一个简单的自定义表单的认证应用》 《SpringSecurity中的过滤器链与自定义过滤器》 《SpringSecurity实现自定义用户认证方案》 《SpringSecurity密码编码器:使用BCrypt算法加密、自定义密码编码器》 《SpringSecur…

Linux:Shell环境变量与命令行参数

目录 Shell的变量功能 什么是变量 变数的可变性与方便性 影响bash环境操作的变量 脚本程序设计&#xff08;shell script&#xff09;的好帮手 变量的使用&#xff1a;echo 变量的使用&#xff1a;HOME 环境变量相关命令 获取环境变量 环境变量和本地变量 命令行…

Linux内核自定义协议族开发指南:理解net_device_ops、proto_ops与net_proto_family

在Linux内核中开发自定义协议族需要深入理解网络协议栈的分层模型。net_device_ops、proto_ops和net_proto_family是三个关键结构体,分别作用于不同的层次。本文将详细解析它们的作用、交互关系及实现方法,并提供一个完整的开发框架。 一、核心结构体的作用与层级关系 struct…

科技快讯 | DeepSeek宣布开源DeepGEMM;多个团队开发AI论文反识别技术;OpenAI GPT 4.5现身Android测试版,即将发布

DeepSeek宣布开源DeepGEMM 财联社2月26日电&#xff0c;Deepseek于开源周第三天宣布开源DeepGEMM。DeepGEMM 是一个专为简洁高效的 FP8 通用矩阵乘法&#xff08;GEMM&#xff09;设计的库&#xff0c;具有细粒度缩放功能&#xff0c;如 DeepSeek-V3 中所提出。它支持普通和混合…

可编辑73页PPT | DeepSeek自学手册-从理论模型训练到实践模型应用

荐言分享&#xff1a;DeepSeek自学手册——从理论模型训练到实践模型应用》是一本全面介绍DeepSeek系列模型的自学指南。该手册详细阐述了DeepSeek V3和R1两大模型的理论基础、训练过程、性能表现、使用技巧、应用场景以及替代方案&#xff0c;旨在帮助用户全面了解并高效使用D…