当前位置:首页 > 文章列表 > 数据库 > Redis > Redis t-digest压缩参数怎样影响内存与精度

Redis t-digest压缩参数怎样影响内存与精度

来源:17golang原创 2026-10-13 19:11:47 0浏览 收藏

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 等信息。

压缩参数与摘要存储、分位数估算的静态关系
图1:静态结构说明图。“参数边界”中的 COMPRESSION 关联“摘要存储”中的质心摘要、观测缓冲和内存占用;质心摘要关联“查询结果”中的分位数估算。连线表示结构和取舍关系,不代表执行步骤或实测曲线。

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 不会直接给出“当前误差率”,误差需要使用同一份原始样本的参考分位数计算。两个配置的结果相同,也不证明它们对所有分布都等价。

相同样本、精确基线、分位数估算和内存记录的比较关系
图2:静态比较关系说明图。“比较输入”包括相同样本与基线口径;“观察材料”包括分位数估算、参考分位数、内存字节数和观测数量。图中没有数值结果,强调误差与内存需要分别判断。
记录项用途不代表什么
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 官方说明。本文比较方法是工程建议,不是参数对应固定准确率的承诺。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Redis TDIGEST.QUANTILE怎么查询多个分位点Redis TDIGEST.QUANTILE怎么查询多个分位点
上一篇
Redis TDIGEST.QUANTILE怎么查询多个分位点
PHP Symfony DomCrawler怎么读取缺失的HTML属性
下一篇
PHP Symfony DomCrawler怎么读取缺失的HTML属性
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    463次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    526次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    543次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    491次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    311次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码