发布时间:2026/7/25 0:30:46
redis数据结构学习——stream 概念Redis Stream 是 Redis 5.0 引入的持久化消息队列数据结构。你可以把它想象成一个只能追加的日志文件每条消息都有一个自动生成的、按时间排序的唯一 ID格式如 1633000000000-0前半是毫秒时间戳后半是序列号它的核心特性有序消息按加入顺序严格排列持久化消息写入后会落到 Redis 的数据文件中重启不丢失消费者组Consumer Group多个消费者可以组成一个组分工消费消息每条消息只被一个消费者处理ACK 机制消费者处理完消息后需要发送 ACK 确认未确认的消息可以被重新消费阻塞读取消费者可以阻塞等待新消息到来使用场景拍卖行竞拍一个拍卖品一个Stream。性能拍卖品有数百个创建上百个 Stream 完全没问题Redis 轻松应对。但如果是几万、几十万个商品就需要优化了。原因Redis 本身非常轻量每个 Stream 的底层是一个基数树Radix Tree结构即使有上万个 StreamRedis 的内存开销和管理成本也很低。具体来说内存开销每个空的 Stream 约占几百字节到 1KB 的内存100 个就是 100KB 左右微不足道。连接开销消费者通过 XREADGROUP 阻塞读取100 个 Stream 意味着 100 个阻塞连接。Redis 单机支持数万连接100 个完全没压力。CPU 开销每个阻塞读取在有消息到达时才会唤醒空闲时几乎零 CPU。什么时候会有问题如果拍卖行有 10 万个活跃商品每个商品一个 Stream就会出现连接数爆炸10 万个阻塞连接虽然 Redis 能扛但网络和系统资源浪费严重。消费者线程爆炸如果每个 Stream 单开一个线程消费10 万个线程直接打垮服务器。Stream 元数据内存10 万个 Stream 的元数据可能占用数百 MB 内存。运维复杂监控、排查问题困难。优化方案分片 合并消费对于大规模场景我们不会一个商品一个 Stream而是采用分片策略方案 1哈希分片推荐将商品 ID 哈希到固定数量的 Stream 中例如 1024 个 Streamimporthashlibdefget_stream_key(auction_id,shard_count1024): 将 auction_id 映射到 1024 个 Stream 中的一个 同一个 auction_id 永远映射到同一个 Stream保证顺序 shardauction_id%shard_countreturnfbid_stream_shard:{shard}# 使用示例stream_keyget_stream_key(12345)# 总是返回 bid_stream_shard:xxx优点Stream 数量固定1024 个无论商品多少都不会膨胀同一个商品的出价永远进入同一个 Stream顺序得到保证消费者数量可控1024 个或更少可以多个 Stream 共用一个消费者方案 2动态消费者池classConsumerPool:管理固定数量的消费者每个消费者负责多个 Streamdef__init__(self,shard_count1024,consumer_per_shard1):self.shard_countshard_count self.consumers[]defstart(self):# 启动 1024 个消费者协程每个负责一个分片forshard_idinrange(self.shard_count):stream_keyfbid_stream_shard:{shard_id}consumerShardConsumer(shard_id,stream_key)self.consumers.append(consumer)asyncio.create_task(consumer.run())方案 3批量读取进一步优化如果某些分片流量很低可以让一个消费者负责多个分片使用 XREADGROUP 同时读取多个 Stream# 一个消费者同时监听多个 StreamRedis 支持多 Stream 读取streams{bid_stream_shard:0:,bid_stream_shard:1:,bid_stream_shard:2:,# ... 最多 1024 个}resultawaitredis.xreadgroup(group_namebid_group,consumer_nameconsumer_0,streamsstreams,count10,block1000)这样我们可以用少量消费者如 32 个处理全部 1024 个分片大幅降低资源消耗。

相关新闻

2026/7/25 0:25:46

电脑端高效查询手游攻略与开服资讯,一站式职场人导航站点搞定

不管是日常休闲玩手游,还是长期关注游戏版本动态,大多数人都会有一个共识:电脑端查阅游戏资料的体验远优于手机。 大屏视野、内容排版完整、攻略细节清晰,无论是副本通关技巧、阵容搭配思路,还是新版本活动规则解读&a…

2026/7/25 0:25:46

【高速缓存】RedisVL 在 Redis 上使用 SQL 查询数据实践指南

Redis 本身并不原生支持 SQL,但通过 RedisVL 提供的 SQLQuery 类,你可以编写类似 SQL 的查询语句,并自动翻译为 Redis 能够执行的底层命令。这不仅降低了学习曲线,还能让你快速利用 Redis 的高级功能(向量检索、地理空…

2026/7/25 0:25:46

【高速缓存】RedisVL为文本生成嵌入向量实践指南

在现代语义搜索和 RAG 应用中,文本嵌入(Embedding) 是核心基础——它将自然语言转换成高维数值向量,使得计算机能够“理解”语义相似性。RedisVL 提供了一套统一的向量化器接口,让你可以使用多种主流嵌入服务&#xff…

2026/7/25 2:05:51

Anthropic AI原生安全实践:从威胁建模到红队测试的完整框架

这次我们来看 Anthropic 最新披露的 AI 原生研发安全控制实践。作为 Claude 模型的创造者,Anthropic 在 AI 安全领域一直走在前沿,这次公开的安全框架不仅适用于大模型研发团队,对任何涉及 AI 应用开发的企业和个人都有重要参考价值。最值得关…

2026/7/25 2:05:51

Gemini与Flash技术结合:快速构建自定义AI工具开发指南

这次我们来看一个结合了 Gemini 和 Flash 技术的创意工具开发方案。如果你正在寻找快速构建自定义 AI 工具的方法,特别是希望利用最新的语言模型能力,这个方案值得重点关注。Gemini 3.6 Flash 并不是一个单一的工具,而是基于 Google Gemini 模…

2026/7/25 2:05:51

课堂人脸分析系统实战:从场景定义到工程落地的完整指南

上周帮一个做教育科技的朋友看项目,他们想给线下课堂加一套“智能分析”系统,核心需求听起来很简单:自动识别学生有没有认真听讲、有没有玩手机、有没有打瞌睡。他们最初的设想是,买几个摄像头,找个现成的开源人脸识别模型,再写个脚本统计一下抬头率,这事儿不就搞定了吗…

2026/7/25 2:05:51

OpenCV与YOLO实战:从零搭建机器人视觉感知系统

想做一个能“看见”世界、理解环境并自主行动的机器人吗?是不是觉得“具身智能”这个词听起来既酷炫又遥不可及,仿佛需要顶级的实验室和博士团队才能入门?别被吓到了。今天,我们就来打破这个认知壁垒,用最接地气的方式,带你从零搭建一个机器人的“眼睛”和“大脑”。 这…

2026/7/25 2:05:51

C++线程安全队列实现与生产者-消费者模型实战

1. 项目概述:从队列到并发模型在C的后端开发、游戏服务器或者任何需要处理异步任务的场景里,队列(Queue)都是一个绕不开的基础数据结构。它遵循“先进先出”(FIFO)的原则,就像现实生活中的排队&…

2026/7/25 2:00:51

llama.cpp-omni:从文本到多模态的实时流式AI引擎实战

很多开发者对 llama.cpp 的印象还停留在"纯文本推理引擎"阶段,认为它只能处理文字输入输出。但实际上,通过 llama.cpp-omni 项目,llama.cpp 早已实现了完整的视频音频多模态能力,支持实时全双工流式交互。本文将带你深入…

2026/7/23 12:54:51

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/25 0:00:15

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:15

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:15

VHF 甚高频语音喊话系统(桥梁智能防撞场景)核心优势

一、直达船员,预警链路最短营运船舶强制标配 VHF 船载电台,属于驾驶室常态化值守设备;预警语音直接传递至驾驶人员,区别于岸上声光报警(船员经常听不到)、短信 / 小程序(船员极少主动查看&#…

2026/7/25 0:59:36

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…