Redis TDIGEST.BYRANK 怎样按排名查询分位摘要
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 大于等于 n | inf | 排名越界,不是实际观测到无限大 |
| 摘要存在但没有样本 | nan | 没有可报告的数值 |
| 键缺失、类型错误或参数错误 | 命令错误 | 保留错误并区分过期与调用问题 |
客户端返回结构受 RESP 版本和客户端接口影响。按所用驱动读取浮点值,并在对外序列化前识别非有限数值;不要把 inf、nan 自动改成 0,否则零耗时会与没有数据、排名越界混在一起。对于 JSON API,可以使用明确的状态字段并将不可报告的数值设为 null,具体协议由应用约定。
重复数值会让多个排名得到相同或相近的估计,这不必然表示命令失效。摘要压缩也意味着不能依据返回值去定位某个原始事件。需要事件级回溯时,应另存原始明细或可追溯引用。
为窗口结果保留上下文与清理规则
结果记录建议包含窗口标识、指标单位、摘要键版本、观测数、请求排名和估计值状态。窗口完成后转为只读,能让报表含义更稳定。摘要键过期后,应返回“窗口不可用”,而不是悄悄创建一份空摘要伪装成原窗口。
TTL 作用于整个键,不会按观测时间逐条移除旧样本。若把长时间持续写入的一个摘要当成滑动窗口,就会混入窗口外观测。更清楚的做法是按业务窗口独立建键,并安排归档与过期;跨窗口汇总还需要单独定义口径。
BYRANK 能返回原始样本吗?不能,它返回排名位置的数值估计,不是明细记录检索。
为什么输入 n 会得到 inf?因为零基最后位置是 n-1,n 已在有效样本排名之外。
增加压缩参数就能当作精确排序列表吗?不能。它仍然是分布摘要,应根据误差目标选择;需要精确明细排序时应使用适合保存原始数据的模型。
Redis CMS.INFO 怎样读取计数草图的宽度与深度
- 上一篇
- Redis CMS.INFO 怎样读取计数草图的宽度与深度
- 下一篇
- Redis LPOS 怎样定位列表中重复值的位置
-
- 数据库 · Redis | 1小时前 | Redis · Sorted Set · redis 有序集合 BZMPOP 阻塞消费
- Redis BZMPOP 怎样阻塞等待多个排名集合的数据
- 315浏览 收藏
-
- 数据库 · Redis | 1小时前 |
- Redis LCS 怎样读取两个字符串的公共子序列位置
- 327浏览 收藏
-
- 数据库 · Redis | 1小时前 |
- Redis SORT_RO 怎样只读排序列表中的数值
- 218浏览 收藏
-
- 数据库 · Redis | 1小时前 | Redis · 缓存 · WEIGHTS Count-Min Sketch Redis CMS.MERGE
- Redis CMS.MERGE 怎样给计数草图设置合并权重
- 326浏览 收藏
-
- 数据库 · Redis | 1小时前 |
- Redis LPOS 怎样定位列表中重复值的位置
- 217浏览 收藏
-
- 数据库 · Redis | 1小时前 |
- Redis CMS.INFO 怎样读取计数草图的宽度与深度
- 304浏览 收藏
-
- 数据库 · Redis | 1小时前 | Redis · redis 分位数 TDIGEST.TRIMMED_MEAN TDigest 截尾均值
- Redis TDIGEST.TRIMMED_MEAN 怎样计算指定分位区间的均值
- 137浏览 收藏
-
- 数据库 · Redis | 1小时前 |
- Redis BITFIELD_RO 怎样只读提取打包整数
- 176浏览 收藏
-
- 数据库 · Redis | 1小时前 | Redis · 缓存设计 · redis limit rev 有序集合 BYSCORE Sorted Set ZRANGESTORE BYLEX
- Redis ZRANGESTORE 怎样保存一段有序集合排名结果
- 232浏览 收藏
-
- 数据库 · Redis | 1小时前 |
- Redis ZDIFF 怎样找出排名集合之间的成员差集
- 168浏览 收藏
-
- 数据库 · Redis | 1小时前 |
- Redis GEOSEARCHSTORE 怎样把附近地点查询保存为有序集合
- 237浏览 收藏
-
- 数据库 · Redis | 12小时前 | Redis · redis 性能 limit SUNIONCARD Set并集
- Redis SUNIONCARD 怎样在达到阈值后停止并集计数
- 161浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 727次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 733次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 810次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 772次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 609次使用
-
- 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浏览

