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

Redis_7_Streams与高可用集群实战

Redis 7.0 Streams与高可用集群部署实战从消息队列到分布式架构,全面掌握Redis核心能力前言Redis不只是一个缓存数据库。Redis 5.0引入的Streams让它具备了消息队列的能力,Redis 7.0进一步增强了Streams的稳定性和性能。很多团队在用Kafka/RabbitMQ处理消息队列时,其实Redis Streams就能满足大部分场景。本文将深入讲解Redis Streams的原理和使用,以及Redis Cluster集群和Sentinel高可用方案的实战部署。一、Redis Streams核心概念1.1 什么是StreamsRedis Streams是Redis 5.0引入的数据结构,类似于Apache Kafka的消息日志:Stream: orders ├── 1699000000000-0: {product: "iPhone", quantity: 1} ├── 1699000000001-0: {product: "MacBook", quantity: 2} ├── 1699000000002-0: {product: "iPad", quantity: 1} └── ...(只追加,不可修改)核心特性:只追加(Append-only):消息只能追加到末尾,不能修改持久化:消息存储在内存,可持久化到RDB/AOF消费者组:支持多个消费者协作消费消息确认:支持ACK机制,防止消息丢失1.2 消息ID格式毫秒时间戳-序列号 例如:1699000000000-0 - 毫秒时间戳:消息创建的时间 - 序列号:同一毫秒内的序号,从0开始 - 可以自定义ID(必须递增) - 自动生成:XADD stream * field value(*表示自动生成)二、Stream命令详解2.1 XADD - 添加消息# 自动生成IDXADD orders * product"iPhone"quantity1price999# 返回: "1699000000000-0"# 指定ID(必须大于当前最大ID)XADD orders1699000000001-0 product"MacBook"quantity2# 限制Stream最大长度XADD orders MAXLEN1000* product"iPad"quantity1# 保留最新1000条,自动删除旧消息# 近似裁减(更高效)XADD orders MAXLEN ~1000* product"Watch"quantity3# ~表示允许实际长度略超过10002.2 XREAD - 读取消息# 从指定ID开始读取(阻塞模式)XREAD COUNT10BLOCK5000STREAMS orders0# COUNT 10: 最多读取10条# BLOCK 5000: 阻塞5秒等待新消息# 0: 从头开始读取# 读取新消息(只读取比指定ID大的消息)XREAD COUNT10BLOCK0STREAMS orders1699000000000-0# 1699000000000-0: 只读取ID大于此值的消息# BLOCK 0: 永久阻塞直到有新消息# 同时监听多个StreamXREAD COUNT5BLOCK0STREAMS orders notifications002.3 XREADGROUP - 消费者组读取# 创建消费者组XGROUP CREATE orders mygroup $ MKSTREAM# $: 从最新消息开始消费# MKSTREAM: 如果Stream不存在则创建# 消费者读取消息XREADGROUP GROUP mygroup consumer1 COUNT10BLOCK0STREAMS orders# : 读取未被分配过的新消息# 读取待处理消息(重新分配)XREADGROUP GROUP mygroup consumer1 COUNT10STREAMS orders0# 0: 读取该消费者的待处理消息2.4 XACK - 确认消息# 确认消息已处理XACK orders mygroup1699000000000-0# 查看待处理消息列表(PEL)XPENDING orders mygroup# 查看待处理消息详情XPENDING orders mygroup - +10# 转移待处理消息给其他消费者XCLAIM orders mygroup consumer236000001699000000000-0# 3600000: 消息空闲超过1小时才转移2.5 其他常用命令# 查看Stream长度XLEN orders# 查看Stream信息XINFO STREAM orders# 查看消费者组信息XINFOGROUPSorders# 查看消费者信息XINFO CONSUMERS orders mygroup# 裁剪StreamXTRIM orders MAXLEN1000# 删除消息XDEL orders1699000000000-0# 反向范围查询XREVRANGE orders + - COUNT10三、消费者组深度解析3.1 消费者组的工作原理Stream: orders ├── msg-1 → 分配给 consumer1 (待处理) ├── msg-2 → 分配给 consumer2 (待处理) ├── msg-3 → 分配给 consumer1 (已确认) ├── msg-4 → 未分配 (新消息) └── msg-5 → 未分配 (新消息) 消费者组 mygroup: ├── consumer1: [msg-1(待处理), msg-3(已确认)] └── consumer2: [msg-2(待处理)] 待处理消息列表 (PEL): ├── msg-1: consumer1, 空闲30秒 └── msg-2: consumer2, 空闲5秒3.2 消费者组 vs 发布订阅特性消费者组发布订阅 (Pub/Sub)消息持久化✅ 存储在Stream中❌ 不存储消息确认✅ 支持ACK❌ 不支持消息回放✅ 可以重新消费❌ 消费后消失负载均衡✅ 自动分配给消费者❌ 每个订阅者都收到消息丢失不会(有PEL)会(离线时收不到)适用场景任务队列、事件处理实时通知、广播3.3 消息确认与重试机制importredisimporttime r=redis.Redis(host='localhost',port=6379,decode_responses=True)# 创建消费者组try:r.xgroup_create('orders','mygroup',id='0',mkstream=True)exceptredis.exceptions.ResponseError:pass# 组已存在defprocess_message(message):"""处理消息"""print(f"Processing:{message}")# 模拟处理time.sleep(1)returnTruedefconsume_messages():"""消费消息的主循环"""whileTrue:# 读取新消息messages=r.xreadgroup(groupname='mygroup',consumername='consumer1',count=1,block=5000,streams={'orders':''})ifnotmessages:continueforstream,msgsinmessages:formsg_id,datainmsgs:try:ifprocess_message(data):# 处理成功,确认消息r.xack('orders','mygroup',msg_id)print(f"Acknowledged:{msg_id}")exceptExceptionase:print(f"Failed to process{msg_id}:{e}")# 不确认消息,等待重试defretry_pending_messages():"""重试超时的待处理消息"""whileTrue:# 获取超时的待处理消息pending=r.xpending_range('orders','mygroup',min='-',max='+',count=10)foriteminpending:ifitem['time_since_delivered']60000:# 超过60秒# 转移给当前消费者r.xclaim('orders','mygroup','consumer

相关文章:

Redis_7_Streams与高可用集群实战

Redis 7.0 Streams与高可用集群部署实战 从消息队列到分布式架构,全面掌握Redis核心能力 前言 Redis不只是一个缓存数据库。Redis 5.0引入的Streams让它具备了消息队列的能力,Redis 7.0进一步增强了Streams的稳定性和性能。很多团队在用Kafka/RabbitMQ处理消息队列时,其实R…...

WordPress AI内容创作栈:基于Claude API的自动化写作与运维实践

1. 项目概述:一个为WordPress量身定制的AI内容创作栈最近在折腾一个内容站,发现内容创作和日常运维的重复性工作实在太多了。从构思文章大纲、撰写初稿,到批量处理图片、优化SEO元数据,再到回复评论、生成周报,这些工作…...

NExT-GPT:从多模态对齐到任意模态生成的架构与实战

1. 项目概述:从“多模态”到“任意模态”的进化 如果你在过去一年里关注过AI领域,一定对“多模态大模型”这个词不陌生。从GPT-4V到Gemini,主流模型都在努力让AI能同时理解文本和图像。但不知道你有没有想过一个问题:为什么我们和…...

VMDE终极指南:如何快速检测虚拟机环境的完整教程

VMDE终极指南:如何快速检测虚拟机环境的完整教程 【免费下载链接】VMDE Source from VMDE paper, adapted to 2015 项目地址: https://gitcode.com/gh_mirrors/vm/VMDE VMDE(Virtual Machine Detection Enhanced)是一款强大的开源虚拟…...

C盘空间管理完全指南:从清理到预防,根治飘红

你的C盘是否在不知不觉中已经飘红?在清理文件的路上,你是否曾因误删系统文件而追悔莫及? C盘告急的普遍困境 每当Windows系统运行缓慢,或安装新软件时弹出磁盘空间不足的提示,用户的第一反应往往是查看C盘使用情况。…...

Intel Quark SoC X1000:物联网边缘计算的核心技术解析

1. Intel Quark SoC X1000:物联网边缘计算的小型化革命在工业自动化现场,一台装备了温度传感器的风机正在持续监测轴承状态。传统方案需要将每秒数百个采样点全部上传云端,不仅占用带宽,延迟更是达到秒级。而采用Intel Quark SoC …...

电光非线性计算加速Transformer注意力机制

1. 电光非线性计算加速Transformer注意力机制的技术背景Transformer架构已经成为当前自然语言处理和计算机视觉领域的主导性神经网络结构,其核心组件——注意力机制依赖于Softmax等非线性运算。虽然这些非线性操作仅占模型总计算量的不到1%,但由于现代GP…...

终极指南:如何在Windows上使用智能PPT计时器掌控演示时间

终极指南:如何在Windows上使用智能PPT计时器掌控演示时间 【免费下载链接】ppttimer 一个简易的 PPT 计时器 项目地址: https://gitcode.com/gh_mirrors/pp/ppttimer 您是否曾在重要演讲中因为超时而尴尬收场?是否在商务汇报中因为时间把控不准而…...

任务历史面板:浏览 Claude Code 的完整任务对话、复制提示词、一键切换继续工作

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

基于Godot引擎的经典游戏重制:OpenClaw项目架构与实现深度解析

1. 项目概述与核心价值最近在独立游戏开发圈里,一个名为“OpenClaw”的开源项目热度不低。它的全称是“GambitGamesLLC/openclaw-godot”,简单说,这是一个基于Godot引擎,对经典DOS平台动作冒险游戏《The Claw》进行的开源重制版。…...

电子设计协同:跨团队互联规划工具的应用与优化

1. 跨团队互联规划:电子设计协同的破局之道在当今高度复杂的电子系统设计中,芯片(IC)、封装(Package)和印刷电路板(PCB)三大设计团队的协同工作已成为决定产品成败的关键因素。传统设计流程中,这三个团队往往各自为政,通过Excel表…...

观测云 4 月产品升级报告 | 统一目录、Obsy AI 全新上线,基础设施、场景、监控告警、管理多项能力升级

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

Python ORM实战:SQLAlchemy深度解析

Python ORM实战:SQLAlchemy深度解析 引言 在Python后端开发中,ORM(对象关系映射)是连接应用程序和数据库的重要桥梁。作为一名从Rust转向Python的后端开发者,我深刻体会到SQLAlchemy在处理数据库操作方面的强大能力。S…...

用电脑自动玩小红书,OpenClaw+ADB让效率翻倍!附详细教程“

本文介绍了如何使用OpenClaw(运行在MacOS上)结合ADB工具实现Android手机的自动化操作。内容涵盖Android手机配置(开启开发者选项和USB调试)、MacOS环境准备(安装ADB工具和配置ADBKeyboard支持中文输入)&…...

AI产品经理 VS 传统产品经理:不是技术升级,而是物种进化!你准备好了吗?

文章指出,AI时代的产品经理并非仅仅是懂点AI技术的传统产品经理升级版,而是完全不同的“物种”。文章从产品经理的职责、核心能力、与AI的协作模式等方面对比了传统产品经理和AI产品经理的区别,强调AI产品经理需要具备处理意图模糊性、设计失…...

新手小白必看!AI大模型自学路线图,从入门到精通_自学AI大模型学习路线推荐

自学AI大模型学习路线推荐 今天,我想和大家分享一条自学AI大模型的学习路线,希望能帮助新手小白们更好地进入这个领域。 1. 打好基础:数学与编程 数学基础 线性代数:理解矩阵、向量、特征值、特征向量等概念。推荐课程&#xff1a…...

基于MCP协议构建监控数据连接器:统一多源数据赋能AI运维

1. 项目概述:一个面向开发者的监控数据连接器如果你是一名开发者,尤其是后端或运维工程师,那么“监控”这个词对你来说一定不陌生。从服务器CPU、内存使用率,到应用接口的响应时间、错误率,再到业务层面的关键指标&…...

微信聊天记录永久备份完整指南:WeChatExporter开源工具终极教程

微信聊天记录永久备份完整指南:WeChatExporter开源工具终极教程 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否担心珍贵的微信聊天记录会因为手机丢失…...

从网易招聘看技术人择校与城市选择:一线城市VS武汉,哪里机会更多?

技术人择校与城市选择指南:数据驱动的职业发展决策 站在高考志愿填报或考研择校的十字路口,每个怀揣技术梦想的年轻人都面临着一个关键抉择:是追逐一线城市的产业聚集效应,还是选择武汉这类高校密集但名企较少的城市?这…...

PostgreSQL COPY命令实战:从CSV导入到导出的完整数据流处理

1. 为什么你需要掌握COPY命令 如果你经常需要把Excel表格或CSV文件的数据导入PostgreSQL数据库,或者反过来把数据库查询结果导出成文件,那么COPY命令就是你的瑞士军刀。我见过太多人还在用Python脚本逐行读写CSV,不仅效率低,代码还…...

AI时代计算机教育变革:从代码生成到系统设计的教学重构

1. 项目概述:当AI走进计算机课堂,我们面临的真实图景作为一名在计算机教育一线摸爬滚打了十几年的从业者,我亲眼见证了从粉笔黑板到多媒体教室,再到如今云端协作的变迁。但最近两年,以ChatGPT、GitHub Copilot为代表的…...

稳压二极管数据手册参数深度解析:从符号到实战选型

1. 稳压二极管核心参数全解析 第一次拿到稳压二极管的数据手册时,我完全被那些密密麻麻的符号搞懵了。VZ、IZK、ZZT这些字母组合到底代表什么?后来在项目中踩过几次坑才明白,这些参数直接关系到电路的稳定性。就拿去年做的一个电源模块来说&a…...

实战解析:Python如何一步步解开JWE加密令牌的秘密

1. 认识JWE:加密令牌的守护者 第一次遇到JWE加密令牌时,我完全懵了。作为一个习惯处理普通JWT的后端开发者,发现常用的jwt.io网站居然无法解析这个令牌,就像拿着钥匙却找不到锁孔。JWE(JSON Web Encryption&#xff09…...

开题报告一次通关密码:告别反复修改,虎贲等考 AI 重新定义高效开题

每一位本硕博学生都懂:开题不顺,论文全乱。开题报告是毕业论文的 “总设计图”,选题、框架、文献、技术路线只要一项不达标,就会被导师反复打回,浪费时间、消耗心态,甚至直接拖慢整个毕业节奏。可自己写开题…...

GPU流水线设计:提升深度学习计算效率的关键技术

1. GPU流水线设计基础概念现代GPU架构为深度学习工作负载提供了强大的并行计算能力,但传统的批量同步并行(BSP)执行模型存在资源利用率低下的问题。GPU流水线技术通过将计算图分解为多个阶段并在其间插入队列节点,实现了计算与通信的重叠执行。1.1 传统B…...

从零搭建ROS Gazebo仿真小车:集成摄像头与YOLO目标检测实现视觉感知

1. 环境准备与ROS安装 在开始构建仿真小车之前,我们需要先搭建好开发环境。ROS(Robot Operating System)是目前机器人开发最流行的框架之一,它提供了硬件抽象、设备驱动、库函数、可视化工具等丰富功能。我推荐使用Ubuntu 20.04 L…...

重构计算机历史叙事:挖掘被遗忘的贡献者与构建包容性科技未来

1. 项目概述:为什么我们需要重写计算机历史如果你问一个对计算机历史稍有了解的人,让他列举几位先驱,大概率会听到冯诺依曼、艾伦图灵、比尔盖茨、史蒂夫乔布斯这些名字。这个名单很长,但有一个共同点:他们几乎都是白人…...

Funannotate数据库安装终极指南:解决HPC环境中的常见问题

Funannotate数据库安装终极指南:解决HPC环境中的常见问题 【免费下载链接】funannotate Eukaryotic Genome Annotation Pipeline 项目地址: https://gitcode.com/gh_mirrors/fu/funannotate Funannotate作为一款专业的真核生物基因组注释流程工具&#xff0c…...

基础设施可观测性:监控和诊断基础设施状态

基础设施可观测性:监控和诊断基础设施状态 一、基础设施可观测性概述 1.1 基础设施可观测性的定义 基础设施可观测性是指通过收集、分析和可视化基础设施的运行数据,来理解和监控基础设施状态的能力。它包括监控服务器、网络、存储等基础设施组件的性能和…...

从零构建高效项目脚手架:自动化项目初始化与最佳实践

1. 项目概述:一个为开发者准备的“瑞士军刀”式工具集最近在GitHub上闲逛,发现了一个挺有意思的项目,叫jpKuji/clawstrate。乍一看这个名字,有点摸不着头脑,既不像常见的框架名,也不像某个具体的应用。点进…...