当前位置:首页 > 文章列表 > 数据库 > Redis > Redis TDIGEST.CDF与QUANTILE的查询方向有什么区别

Redis TDIGEST.CDF与QUANTILE的查询方向有什么区别

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

Redis t-digest 里,TDIGEST.CDF 和 TDIGEST.QUANTILE 都是在同一个概率草图上做近似查询,但方向正好相反:CDF 接收一个具体数值,返回不超过该数值的累计比例;QUANTILE 接收 0 到 1 之间的分位数,返回对应的估计数值。把“阈值问比例”和“比例问阈值”分开,接口就不容易写反。

官方文档:https://redis.io/docs/latest/commands/tdigest.cdf/

要判断“有多少请求不超过 100ms”,使用 TDIGEST.CDF;要找“P95 延迟是多少”,使用 TDIGEST.QUANTILE。两者都只返回 t-digest 的估算结果,不等同于保存全部明细后的精确排序。
要点速览
  • CDF 是 value → fraction,适合阈值达标率和容量门槛判断。
  • QUANTILE 是 fraction → value,适合 P50、P95、P99 等分位指标。
  • 空 sketch 返回 nan;不存在的 key、类型错误和非法参数会返回错误。

先把两条命令的输入输出方向分开

TDIGEST.CDF key value [value ...] 的输入是一个或多个业务阈值,例如 100、300、1000 毫秒;返回每个阈值对应的累计比例。这个比例按文档定义为“小于该值的观测数,加上等于该值观测数的一半”所形成的估计分数。

TDIGEST.QUANTILE key quantile [quantile ...] 的输入是 0 到 1 的分位数,例如 0.5、0.95;返回每个分位数对应的浮点估计值。可以记成一张反向映射表:

命令输入输出典型问题
TDIGEST.CDFvaluefraction不超过阈值的请求占比是多少
TDIGEST.QUANTILEfractionvalueP95 的延迟或价格是多少

用同一份样本看 CDF 与 QUANTILE 如何互相映射

下面用一组小样本建立同一个 sketch。命令块中的注释只说明实验意图,结果是为了展示参数方向,不应当被当作线上运行截图。

# 创建 t-digest;COMPRESSION 影响草图的空间与近似精度
redis-cli TDIGEST.CREATE latency COMPRESSION 100
# 写入一组模拟请求延迟,单位统一为毫秒
redis-cli TDIGEST.ADD latency 20 35 40 60 80 100 120 180 260 420
# 给定分位数,反查估计延迟值
redis-cli TDIGEST.QUANTILE latency 0.5 0.95
# 给定阈值,反查累计比例
redis-cli TDIGEST.CDF latency 100 200

阅读返回值时不要把两行结果互换:第一行的两个数是 P50、P95 的延迟估计,第二行的两个数是 100ms、200ms 阈值的累计比例。真实数据量增大后,t-digest 会压缩观测分布,所以结果仍是近似值。

按业务问题选择阈值查询还是分位点查询

如果监控规则已经给出阈值,例如“请求耗时不超过 300ms 的比例是否达到 99%”,先调用 CDF,再把返回的小数与 0.99 比较。如果产品报表要展示 P50、P95、P99,则调用 QUANTILE,让分位数作为输入。

这两个命令可以帮助互相解释,但不保证把一次 CDF 结果再反推回完全相同的 QUANTILE 数值。原因是 t-digest 对分布做了压缩,边界和重复值还会影响近似。若业务需要逐条审计、精确排名或可重放明细,应保存原始样本或采用专门的精确统计方案。

Redis t-digest 中 TDIGEST.CDF 从阈值数值映射到累计比例、TDIGEST.QUANTILE 从分位数映射到估计值的方向说明图
图1:Redis t-digest 查询方向说明图,静态结构图,不是运行截图。

处理估算误差、空 sketch 与批量参数

两条命令都允许一次传入多个查询参数,返回顺序与输入顺序对应。参数必须落在各自的语义范围内:QUANTILE 的分位数应在 0 和 1 之间;CDF 的 value 是浮点阈值。key 不存在或不是 t-digest 类型时,不应把错误吞掉后继续写入业务指标。

空 sketch 是另一个容易漏掉的状态。官方返回信息说明,空结构查询会对所有分位数返回 nan;这代表当前没有可用观测,不是“延迟为零”或“达标率为零”。采集端应把 nan 转为缺失状态,等待首批样本进入后再参与聚合。

Redis TDIGEST.CDF 与 TDIGEST.QUANTILE 的参数边界、空 sketch 和错误处理关系说明图
图2:参数和边界关系说明图,展示空 sketch、非法参数与近似结果的处理边界。

用一张决策表固定接口封装方式

读者要回答的问题调用结果解释
100ms 内完成的请求占多少TDIGEST.CDF key 100返回累计比例估计
P95 延迟是多少TDIGEST.QUANTILE key 0.95返回延迟值估计
采集刚启动是否可出指标先检查空 sketchnan 作为缺失,不当作数值

封装函数时,可以把名称写成 fractionAt(value) 和 valueAt(quantile),不要让两个函数都只叫“query”。这样在告警、报表和容量评估之间传递参数时,错误方向会更早暴露。

常见问题

TDIGEST.CDF 返回的是精确百分比吗?

不是。它返回 t-digest 对累计比例的估计;如果需要精确百分比,必须保留足够的原始数据并进行精确统计。

QUANTILE 的参数可以写 95 吗?

不可以。命令使用 0 到 1 的分数,P95 应写成 0.95,而不是 95。

为什么空 sketch 不能当成零延迟?

因为空 sketch 没有观测值,nan 表示暂时不可估计。把它转成零会让监控和报表产生虚假的好结果。

记住“阈值问比例用 CDF,比例问阈值用 QUANTILE”,再为两种返回值分别处理近似和缺失状态,Redis t-digest 的查询方向就能稳定落到业务接口里。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
PHP Symfony DomCrawler怎么读取缺失的HTML属性PHP Symfony DomCrawler怎么读取缺失的HTML属性
上一篇
PHP Symfony DomCrawler怎么读取缺失的HTML属性
PHP DomCrawler筛选节点和遍历子节点有什么区别
下一篇
PHP DomCrawler筛选节点和遍历子节点有什么区别
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码