当前位置:首页 > 文章列表 > 数据库 > Redis > Redis TDIGEST.BYRANK 怎样按排名查询分位摘要

Redis TDIGEST.BYRANK 怎样按排名查询分位摘要

来源:17golang原创 2026-10-27 08:51:55 0浏览 收藏

Redis TDIGEST.BYRANK key rank [rank ...] 根据排名返回 t-digest 摘要中的数值估计。排名从 0 开始,按观测值从小到大计:0 对应最小观测值,样本数为 n 时,n-1 对应最大观测值。它查的是指定位置的数值,不返回原始记录或成员 ID,也不是输入百分比后直接查分位数。

官方地址:https://redis.io/docs/latest/commands/tdigest.byrank/

先定义样本来源和排名含义

考虑把一个时间窗口内的请求耗时写入摘要,再读取若干排序位置。这里的“排名”是数值分布中的顺序,与用户排行榜成员的名次不同。t-digest 汇总数值分布,不能借 BYRANK 还原第几个请求的详细内容。

我会先固定指标单位、窗口范围和重复事件处理规则。例如耗时统一用毫秒,不能把秒与毫秒混写到同一个键。相同数值的多次观测仍属于多次样本,样本数不是不同数值的数量。若重试把同一事件写入两次,摘要不会自动替应用识别它们是同一业务事件。

观测值与分位摘要组成关系图
静态结构图:样本单位、观测次数和摘要表示共同决定排名查询的解释。

创建摘要并写入同一窗口的数据

部署需要实际提供 TDIGEST 命令,不能仅凭连接成功就假定能力存在。下列命令供读者在支持该能力的测试实例使用;本文未运行 Redis,未生成实际查询回执。演示键应保持独立,避免把已有业务数据混进样本。

# 创建一份独立摘要,压缩参数是精度和内存的取舍。
redis-cli TDIGEST.CREATE 'demo:tdigest170:latency-ms' COMPRESSION 100

# 给演示数据设置生命周期,再写入八次观测;重复值也计入样本。
redis-cli EXPIRE 'demo:tdigest170:latency-ms' 300
redis-cli TDIGEST.ADD 'demo:tdigest170:latency-ms' 12 18 18 25 37 46 65 90

# 查看 Observations 等信息,不把节点数误认为样本数。
redis-cli TDIGEST.INFO 'demo:tdigest170:latency-ms'

TDIGEST.INFO 中 Observations 表示已加入摘要的观测数,Merged nodes、Unmerged nodes 等描述摘要内部组织,不能拿它们直接代替 n。Compression 控制精度和内存之间的取舍,并不意味着“每个排名都能精确还原”。调整参数时应考虑代表性数据的误差需求,而不是为所有指标套同一个越大越好的配置。

按零基排名查询近似值

# 查询零基位置 0、3、7,返回顺序对应请求排名的顺序。
redis-cli TDIGEST.BYRANK 'demo:tdigest170:latency-ms' 0 3 7

# 也可一次请求不同排列的排名,调用方应逐项对应结果。
redis-cli TDIGEST.BYRANK 'demo:tdigest170:latency-ms' 7 0 3

给定上面的八个观测,rank=7 是末位,rank=8 已超出样本位置。官方文档保证最小与最大观测位置的准确返回;中间位置应作为估计值理解,不要把原始排序数组在第 3 位的值写成必然精确的服务返回。

排名参数是非负整数,不是 0 到 1 之间的比例。若产品入口表达的是某个百分位,需明确采用的统计定义和排名换算规则,或者使用相应分位查询接口;不能直接把 0.95 当作整数排名,也不应把 95 无条件解释为 P95。

读取 INFO 后再读 BYRANK 是两次命令,若期间仍有观测写入,n 可能已经改变。对于需要按固定样本数解释末位的报表,可以使用已经完成的窗口摘要。不要因为两次命令都成功,就声称它们属于同一时刻的业务快照。

排名参数与查询结果状态关系图
静态结构图:排名有效区间与摘要状态决定数值结果如何被解释。

区分异常值、空摘要和命令错误

情况文档约定或处理方向应用解释
非空摘要,rank=0最小观测值保留原指标单位
非空摘要,rank=n-1最大观测值前提是 n 对应这份摘要状态
非空摘要,rank 大于等于 ninf排名越界,不是实际观测到无限大
摘要存在但没有样本nan没有可报告的数值
键缺失、类型错误或参数错误命令错误保留错误并区分过期与调用问题

客户端返回结构受 RESP 版本和客户端接口影响。按所用驱动读取浮点值,并在对外序列化前识别非有限数值;不要把 inf、nan 自动改成 0,否则零耗时会与没有数据、排名越界混在一起。对于 JSON API,可以使用明确的状态字段并将不可报告的数值设为 null,具体协议由应用约定。

重复数值会让多个排名得到相同或相近的估计,这不必然表示命令失效。摘要压缩也意味着不能依据返回值去定位某个原始事件。需要事件级回溯时,应另存原始明细或可追溯引用。

为窗口结果保留上下文与清理规则

结果记录建议包含窗口标识、指标单位、摘要键版本、观测数、请求排名和估计值状态。窗口完成后转为只读,能让报表含义更稳定。摘要键过期后,应返回“窗口不可用”,而不是悄悄创建一份空摘要伪装成原窗口。

TTL 作用于整个键,不会按观测时间逐条移除旧样本。若把长时间持续写入的一个摘要当成滑动窗口,就会混入窗口外观测。更清楚的做法是按业务窗口独立建键,并安排归档与过期;跨窗口汇总还需要单独定义口径。

BYRANK 能返回原始样本吗?不能,它返回排名位置的数值估计,不是明细记录检索。

为什么输入 n 会得到 inf?因为零基最后位置是 n-1,n 已在有效样本排名之外。

增加压缩参数就能当作精确排序列表吗?不能。它仍然是分布摘要,应根据误差目标选择;需要精确明细排序时应使用适合保存原始数据的模型。

接口依据:TDIGEST.BYRANK、TDIGEST.INFO、TDIGEST.CREATE。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
Redis CMS.INFO 怎样读取计数草图的宽度与深度Redis CMS.INFO 怎样读取计数草图的宽度与深度
上一篇
Redis CMS.INFO 怎样读取计数草图的宽度与深度
Redis LPOS 怎样定位列表中重复值的位置
下一篇
Redis LPOS 怎样定位列表中重复值的位置
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之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模型性能。
    727次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    733次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    810次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    772次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    609次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码