redis数据结构学习——stream

发布时间:2026/9/27 12:40:00

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/9/27 12:15:59

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

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

2026/9/26 23:37:48

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

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

2026/9/25 10:42:13

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

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

2026/9/27 12:36:24

iforgeAI 再升级:用 TaoToken 统一 Key 打通 AI 数字团队配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/27 12:36:24

win2012iis新建网站新手入门:3步搞定不懂代码也能上线

win2012iis新建网站新手入门:3步搞定不懂代码也能上线 想做个网站展示公司产品,但看着满屏的代码头大?别慌,这种“自己不会代码想做网站”的焦虑,很多新手都经历过。其实,如果你手头有一台 Windows Server 2012…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑