*Redis TDIGEST.CREATE 命令

TDIGEST.CREATE 创建一个新的空 t-digest 数据结构。


*语法

TDIGEST.CREATE key [COMPRESSION compression]

*参数说明

参数 类型 必填 说明
key String t-digest 键名
COMPRESSION Keyword 指定压缩参数的关键字
compression Integer 压缩因子,默认 100。越大精度越高,内存越大。范围 1~1000

*返回值

  • OK:创建成功
  • Error:参数错误、内存不足、key 已存在且为不同类型

*时间复杂度

O(1)

*

*示例

*基本用法

> TDIGEST.CREATE mydigest
OK
> TDIGEST.ADD mydigest 1.0 2.0 3.0
OK

*指定压缩因子

> TDIGEST.CREATE mydigest COMPRESSION 200
OK
> TDIGEST.INFO mydigest
1) "Compression"
2) "200"
3) "Capacity"
4) (integer) 1210
...

*重新创建已存在的 key(相同类型)

> TDIGEST.CREATE mydigest
OK
> TDIGEST.CREATE mydigest
OK
> TDIGEST.INFO mydigest
...

*常见错误

错误 原因 解决
ERR wrong number of arguments 未提供 key 至少提供一个 key
ERR value is not an integer compression 非整数 compression 必须是整数
ERR compression should be positive compression <= 0 compression 必须 >= 1
ERR compression should be less than 1000 compression > 1000 compression 必须 <= 1000
WRONGTYPE key 已存在但为其他类型 更换 key 名或先 DEL

*最佳实践

  • 默认压缩因子 100 够用:在大多数场景下,默认值能在精度和内存之间取得良好平衡
  • 高精度需求:需要更精确的分位数时(如金融、科学计算),可适当提高到 200-500
  • 内存敏感场景:可降低到 50-100,牺牲少量精度换取内存节省
  • 必须先 CREATETDIGEST.ADD 等操作要求 key 已存在,不会自动创建

*FAQ

Q1: 压缩因子是什么意思? A: 压缩因子控制 t-digest 合并节点的数量和精度。值越大,内部节点越多,分位数估计越精确,但内存占用也越大。

Q2: 可以对已存在的 t-digest 重复 CREATE 吗? A: 可以。对已存在的 t-digest 类型 key 执行 CREATE 会重置为空结构。但如果是其他类型会报 WRONGTYPE。

Q3: t-digest 和普通 Redis key 有什么区别? A: t-digest 是一种特殊的概率数据结构(类似 HyperLogLog),专门用于流式分位数统计,不是普通 String/Hash/List/Set/ZSet。