Redis t-digest压缩参数怎样影响内存与精度
Redis t-digest压缩参数怎样影响内存与精度
Redis t-digest 的 COMPRESSION 控制分位数估算的精度与内存取舍:较高的值通常允许保留更细的摘要信息,倾向于提高精度,同时付出更多内存成本。它不是“数值越大压得越小”的文件压缩等级。官方 TDIGEST.CREATE 文档给出的默认值是 100,并说明 1000 更精确;这不是固定误差保证,也不表示提高十倍参数就得到十倍精度。
官方地址:https://redis.io/docs/latest/commands/tdigest.create/
先固定输入口径,参数比较才有意义
假设你要估算接口延迟的 P50、P95 和 P99,样本应统一为同一种单位,例如毫秒。两个待比较的摘要必须接收同一批值、同一顺序和相同批次划分;别把一边的请求延迟与另一边的任务耗时混用。参数无法修复漏报、重复写入或单位混杂。
先定义统计窗口和样本来源,再确定误差怎么衡量。比如你真正关心的是 P99 的数值偏差,而不是所有分位点的平均偏差。可以保留一份离线原始样本,用明确的分位数定义计算参考值。插值分位数和最近秩分位数不是同一种口径,比较时必须写清所用定义。
摘要保留的是结构信息,不是完整明细
t-digest 用质心摘要来表示数据分布,同时存在尚未合并的观测缓冲。COMPRESSION 与摘要的精细程度和资源使用有关,不应理解成“设置为 100 就只保留 100 个原始值”。TDIGEST.INFO 可以读到 Compression、Capacity、Merged nodes、Unmerged nodes、Observations 和 Memory usage 等信息。

Capacity 描述存储质心及未合并观测的缓冲容量,Memory usage 是摘要分配的字节数。它们不能代替整个 Redis 进程的内存统计,也不等于样本数量。Observations 用来核对累计写入的观测数量,而不是据此判断分位数已经精确。
创建两个独立摘要,喂入相同样本
以下 shell 命令仅供支持 TDIGEST 命令的隔离测试环境使用,两个 demo 键必须是本次独立测试的新键。逐条确认 CREATE 成功后再写入;如果键已存在或命令失败,先处理实际错误,不要继续往旧数据里追加。这里选 100 和 1000 只是演示比较方式,不是针对生产系统的统一推荐。
# 创建两个专用测试摘要,只改变压缩参数 redis-cli TDIGEST.CREATE demo:td:comparison:c100 COMPRESSION 100 redis-cli TDIGEST.CREATE demo:td:comparison:c1000 COMPRESSION 1000 # 保持单位、值顺序和批次一致,样本只用于学习命令 redis-cli TDIGEST.ADD demo:td:comparison:c100 9 11 11 14 18 23 41 96 210 680 redis-cli TDIGEST.ADD demo:td:comparison:c1000 9 11 11 14 18 23 41 96 210 680
小样本足以核对命令和数据口径,但通常不足以体现参数在真实分布上的精度取舍。正式选型应覆盖代表性的样本量、重复值、长尾值和峰值时段,不把十个数的结果当成大规模数据的保证。本文未运行这些命令,也没有填入虚构内存或误差结果。
把内存观测和误差比较分开记录
# 一次读取多个关注分位点,输入比例在0到1之间 redis-cli TDIGEST.QUANTILE demo:td:comparison:c100 0.5 0.95 0.99 redis-cli TDIGEST.QUANTILE demo:td:comparison:c1000 0.5 0.95 0.99 # 核对压缩参数、观测数量及摘要分配的内存字节数 redis-cli TDIGEST.INFO demo:td:comparison:c100 redis-cli TDIGEST.INFO demo:td:comparison:c1000
先核对 Compression 是否是预期值、Observations 是否一致;再记录各个分位点估算及 Memory usage。INFO 不会直接给出“当前误差率”,误差需要使用同一份原始样本的参考分位数计算。两个配置的结果相同,也不证明它们对所有分布都等价。

| 记录项 | 用途 | 不代表什么 |
|---|---|---|
| Compression | 确认测试配置 | 误差百分比 |
| Observations | 核对观测数量 | 完整输入内容完全一致 |
| Memory usage | 比较摘要分配字节数 | Redis整个进程的内存 |
| 分位数估算 | 与明确口径的基线比较 | 所有分位点都精确 |
数值误差可记录为估算值与参考值之差的绝对值。若使用相对误差,参考值为零时要单独处理,不能直接除零。秩误差关注估算值在原始分布中的位置,与数值误差不是同一个指标;大量重复值也会影响位置解释。选参数时优先使用与你的业务决策有关的指标。
参数不能替你处理空数据和错误
空摘要的 QUANTILE 返回 nan,不能把它变成“延迟为 0”。键缺失、键类型不正确、分位点解析失败等情况属于错误响应,也不应该被吞掉成为零值。在非空摘要上,官方说明分位点 0 和 1 分别对应准确的最小、最大观测值,但这不意味着 P95 或 P99 也因此精确。
提高目标配置也不能自动重新获得已经丢弃的原始细节。若需要重新比较不同参数,最好从同一份可信原始样本构建独立摘要。只保留旧摘要再调整后续处理,不能声称恢复了历史明细。合并多个摘要时还应另行核实 TDIGEST.MERGE 的参数和语义,本文不把合并当成无损重新计算。
保存结论,再安排测试键生命周期
测试记录至少保留 Redis及相关组件版本、压缩参数、输入批次、单位、统计窗口、基线定义、目标分位点、内存字节数和误差指标。只有在关注分位点的误差满足要求、资源成本也能接受时,才选定配置。不要只因为“1000 更精确”就给每个业务键都设置同一个大参数。
生产摘要按应用窗口管理保留期;需要复核的数据另行保存明细或可信来源,摘要不是事件档案。本文示例键在比较完成后由测试环境维护者按既定规则清理,不提供作用于生产键的批量清除命令。避免反复向同一示例键追加,污染下一次比较。
相关问题
COMPRESSION 越大是不是越省内存?不是,应按精度与内存的取舍理解,并读取实际摘要内存。
1000 能保证 P99 精确吗?不能。需要在自己的样本、口径和目标分位点上比较,不能套用固定误差承诺。
只看 INFO 能知道精度吗?不能。INFO 提供结构与资源信息,误差仍需对照原始样本的参考计算。
参考 TDIGEST.CREATE、TDIGEST.INFO、TDIGEST.QUANTILE及TDIGEST.ADD 官方说明。本文比较方法是工程建议,不是参数对应固定准确率的承诺。
Redis TDIGEST.QUANTILE怎么查询多个分位点
- 上一篇
- Redis TDIGEST.QUANTILE怎么查询多个分位点
- 下一篇
- PHP Symfony DomCrawler怎么读取缺失的HTML属性
-
- 数据库 · Redis | 1小时前 |
- Redis TDIGEST.CDF与QUANTILE的查询方向有什么区别
- 146浏览 收藏
-
- 数据库 · Redis | 2小时前 | Redis · 命令行 · 百分位数 Redis TDIGEST.QUANTILE t-digest 分位点 Redis Stack
- Redis TDIGEST.QUANTILE怎么查询多个分位点
- 323浏览 收藏
-
- 数据库 · Redis | 2小时前 | Redis · RedisBloom TOPK.LIST Redis TOPK.ADD Redis Top-K TOPK.QUERY TOPK.COUNT
- Redis TOPK.ADD返回被挤出元素后怎么处理
- 332浏览 收藏
-
- 数据库 · Redis | 2小时前 | Redis · redis Count-Min Sketch CMS.QUERY CMS.INITBYPROB 近似计数 频次估计
- Redis Count-Min Sketch为什么不能提供精确计数
- 337浏览 收藏
-
- 数据库 · Redis | 2小时前 | Redis ·
- Redis CMS.MERGE怎样合并多个频次统计
- 340浏览 收藏
-
- 数据库 · Redis | 2小时前 | redis CF.COUNT CF.EXISTS Cuckoo Filter
- Redis CF.COUNT和CF.EXISTS有什么区别
- 166浏览 收藏
-
- 数据库 · Redis | 2小时前 | Redis · redis RedisBloom BF.SCANDUMP BF.LOADCHUNK 布隆过滤器迁移
- Redis BF.SCANDUMP和BF.LOADCHUNK怎样配合迁移过滤器
- 229浏览 收藏
-
- 数据库 · Redis | 2小时前 |
- Redis BF.MEXISTS批量判断结果怎样对应输入项
- 136浏览 收藏
-
- 数据库 · Redis | 2小时前 | Redis · redis 布隆过滤器 RedisBloom 误判率 BF.RESERVE
- Redis BF.RESERVE怎么设置容量与误判率
- 421浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 463次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 526次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 543次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 491次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 311次使用
-
- Redis Stream XTRIM 如何避免消费组积压无限增长
- 2026-09-12 501浏览
-
- Redis AOF rewrite 期间如何判断磁盘与内存压力
- 2026-09-12 501浏览
-
- Redis RDB 和 AOF 怎么按可接受数据丢失量选择
- 2026-09-08 501浏览
-
- Redis XAUTOCLAIM 之后为什么仍有 pending:JUSTID、PEL 与消息删除边界
- 2026-08-29 501浏览
-
- Redis SET 的 GET 与 KEEPTTL 怎么一起验收:旧值返回、续期与回滚边界
- 2026-08-20 501浏览

