# Probabilistic命令
# CMS.INCRBY
# 语法
CMS.INCRBY key item increment [item increment ...]
# 描述
按指定增量增加项目的数量。单次调用即可同时增加多个项目
# 参数
- key
键名
- iten increment
一个或多个项目增量对。每个项目的计数器将按对应的增量值进行增加一个或多个项目增量对。每个项目的计数器将按对应的增量值进行增加
# 示例
> CMS.INCRBY test foo 10 bar 42
1) (integer) 10
2) (integer) 42
# CMS.INFO
# 语法
CMS.INFO key
# 描述
返回草图的宽度、深度和总数量
# 参数
- key
键名
# 示例
> CMS.INFO test
1) width
2) (integer) 2000
3) depth
4) (integer) 7
5) count
6) (integer) 0
# CMS.INITBYDIM
# 语法
CMS.INITBYDIM key width depth
# 描述
根据用户指定的维度,初始化一个计数最小草图
# 参数
- key
键名
- width
每个数组中的计数器数量。该数值越大,估算的误差越小
- depth
计数器数组的数量。该数值越大,出现特定大小误差的概率就越低
# 示例
> CMS.INITBYDIM test 2000 5
OK
# CMS.INITBYPROB
# 语法
CMS.INITBYPROB key error probability
# 描述
初始化一个计数最小草图,以满足指定的误差容忍度
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- error
估算误差大小。该误差以所统计总项数的百分比来表示。这会影响草图的宽度
- probability
期望的计数膨胀概率。该值应为介于 0 到 1 之间的小数,它决定了草图深度。例如,如果期望的误报率为 0.1%(即千分之一),则应将 error_rate 设置为 0.001。这个值越接近 0,每个元素占用的内存就越多,每次操作消耗的 CPU 也就越大
# 示例
> CMS.INITBYPROB test 0.001 0.01
OK
# CMS.MERGE
# 语法
CMS.MERGE destination numKeys source [source ...] [WEIGHTS weight
[weight ...]]
# 描述
将多个草图合并为一个。所有参与合并的草图必须具有相同的宽度和深度。可以使用权重对特定的草图进行乘数加权,默认权重为 1
# 参数
- destination
目标草图的名称。该草图必须已经过初始化
- numKeys
需要合并的草图数量
- source
待合并的源草图的名称
- WEIGHTS
每个草图的乘数。默认值为 1
# 示例
> CMS.MERGE dest 2 test1 test2 WEIGHTS 1 3
OK
# CMS.QUERY
# 语法
CMS.QUERY key item [item ...]
# 描述
返回草图中一个或多个项目的数量
# 参数
- key
键名
- item
需要返回其数量的一个或多个项目
# 示例
> CMS.QUERY test foo bar
1) (integer) 10
2) (integer) 42
# PFADD
# 语法
PFADD key [element [element ...]]
# 描述
将所有作为参数的元素,添加到由第一个参数指定变量名所对应的 HyperLogLog 数据结构中
# 参数
- key
一个或多个有序集合键。其结果为第一个集合中存在,但不存在于后续任何集合中的成员
- element
需要添加到 HyperLogLog 中的一个或多个元素。如果不传任何元素,该命令只会在键不存在时创建它
# 示例
> PFADD hll a b c d e f g
(integer) 1
> PFCOUNT hll
(integer) 7
# PFCOUNT
# 语法
PFCOUNT key [key ...]
# 描述
当只传入一个键(key)时,PFCOUNT 会返回指定键所存储的 HyperLogLog 数据结构计算出的近似基数。如果该键不存在,则返回 0
# 参数
- key
一个或多个有序集合的键
# 示例
> PFADD hll foo bar zap
(integer) 1
> PFADD hll zap zap zap
(integer) 0
> PFADD hll foo bar
(integer) 0
> PFCOUNT hll
(integer) 3
> PFADD some-other-hll 1 2 3
(integer) 1
> PFCOUNT hll some-other-hll
(integer) 6
# PFMERGE
# 语法
PFMERGE destkey [sourcekey [sourcekey ...]]
# 描述
将多个 HyperLogLog 值合并为一个唯一值,该值能够近似表示所有源 HyperLogLog 结构所记录集合的并集的基数
# 参数
- destkey
目标 HyperLogLog 键,用于存储合并后的结果
- sourcekey
一个或多个要合并到 destkey 中的源 HyperLogLog 键。destkey 本身也会被包含在合并操作中
# 示例
> PFADD hll1 foo bar zap a
(integer) 1
> PFADD hll2 a b c foo
(integer) 1
> PFMERGE hll3 hll1 hll2
OK
> PFCOUNT hll3
(integer) 6
# TDIGEST
# 语法
TDIGEST.ADD key value [value ...]
# 描述
向 t-digest 草图中添加一个或多个观测值
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- value
是一个观测值的浮点数值
# 示例
> TDIGEST.ADD t 1 2 3
OK
> TDIGEST.ADD t string
(error) ERR T-Digest: error parsing val parameter
# TDIGEST.BYRANK
# 语法
TDIGEST.BYRANK key rank [rank ...]
# 描述
针对每个输入的排名,返回对应的浮点数估值。支持在单次调用中获取多个估值
# 参数
- key
键名
- rank
需要获取对应值的排名
# 示例
> TDIGEST.CREATE t COMPRESSION 1000
OK
> TDIGEST.ADD t 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
OK
> TDIGEST.BYRANK t 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1) "1"
2) "2"
3) "2"
4) "3"
5) "3"
6) "3"
7) "4"
8) "4"
9) "4"
10) "4"
11) "5"
12) "5"
13) "5"
14) "5"
15) "5"
16) "inf"
# TDIGEST.BYREVRANK
# 语法
TDIGEST.BYREVRANK key reverse_rank [reverse_rank ...]
# 描述
针对每个输入的反向排名,返回该反向排名对应的浮点数估值。支持在单次调用中获取多个估值
# 参数
- key
键名
- rerank
需要获取对应值的反向排名
# 示例
> TDIGEST.CREATE t COMPRESSION 1000
OK
> TDIGEST.ADD t 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
OK
> TDIGEST.BYREVRANK t 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1) "5"
2) "5"
3) "5"
4) "5"
5) "5"
6) "4"
7) "4"
8) "4"
9) "4"
10) "3"
11) "3"
12) "3"
13) "2"
14) "2"
15) "1"
16) "-inf"
# TDIGEST.CDF
# 语法
TDIGEST.CDF key value [value ...]
# 描述
对于每个输入的值,它会估算出一个浮点数比例。这个比例的计算逻辑是:小于该值的观测数量,加上等于该值的观测数量的一半。而且,你完全可以在一次调用中同时获取多个值的比例
# 参数
- key
键名
- value
是一个观测值的浮点数值
# 示例
> TDIGEST.CREATE t COMPRESSION 1000
OK
> TDIGEST.ADD t 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
OK
> TDIGEST.CDF t 0 1 2 3 4 5 6
1) "0"
2) "0.033333333333333333"
3) "0.13333333333333333"
4) "0.29999999999999999"
5) "0.53333333333333333"
6) "0.83333333333333337"
7) "1"
# TDIGEST.CREATE
# 语法
TDIGEST.CREATE key [COMPRESSION compression]
# 描述
分配内存并初始化一个新的 t-digest 草图
# 参数
- key
一个或多个要从中弹出元素的有序集合键
- compression
这代表了精度与内存消耗之间一个可控的权衡。对于常规使用,100 是一个常见的取值,也是未指定时的默认值。设置为 1000 则能获得更高的精度
# 示例
> TDIGEST.CREATE t COMPRESSION 100
OK
# TDIGEST.INFO
# 语法
TDIGEST.INFO key
# 描述
返回 t-digest 草图的信息与统计数据
# 参数
- key
键名
# 示例
> TDIGEST.CREATE t
OK
> TDIGEST.ADD t 1 2 3 4 5
OK
> TDIGEST.INFO t
1) Compression
2) (integer) 100
3) Capacity
4) (integer) 610
5) Merged nodes
6) (integer) 0
7) Unmerged nodes
8) (integer) 5
9) Merged weight
10) (integer) 0
11) Unmerged weight
12) (integer) 5
13) Observations
14) (integer) 5
15) Total compressions
16) (integer) 0
17) Memory usage
18) (integer) 9768
# TDIGEST.MAX
# 语法
TDIGEST.MAX key
# 描述
返回 t-digest 草图中的最大观测值
# 参数
- key
键名
# 示例
> TDIGEST.CREATE t
OK
> TDIGEST.MAX t
"nan"
> TDIGEST.ADD t 3 4 1 2 5
OK
>TDIGEST.MAX t
"5"
# TDIGEST.MERGE
# 语法
TDIGEST.MERGE destination-key numkeys source-key [source-key ...]
[COMPRESSION compression] [OVERRIDE]
# 描述
将多个 t-digest 草图合并为一个草图
# 参数
- destination-key
表示 t-digest 草图的键名,观测值将被合并到该草图中
- numKeys
需要合并的草图数量
- source-key
每个 source-key都是一个 t-digest 草图的键名,系统将从这些草图中提取观测值进行合并
- compression
这代表了精度与内存消耗之间一个可控的权衡。对于常规使用,100 是一个常见的取值,也是未指定时的默认值。设置为 1000 则能获得更高的精度
- OVERIDE
如果目标键已经存在,并且指定了 OVERRIDE(覆盖)参数,则该键将被覆盖
# 示例
> TDIGEST.CREATE {metrics}:m1
OK
> TDIGEST.CREATE {metrics}:m2
OK
> TDIGEST.ADD {metrics}:m1 10.0 20.0
OK
> TDIGEST.ADD {metrics}:m2 30.0 40.0
OK
> TDIGEST.MERGE {metrics}:m 2 {metrics}:m1 {metrics}:m2
OK
> TDIGEST.BYRANK {metrics}:m 0 1 2 3 4
1) "10"
2) "20"
3) "30"
4) "40"
5) "inf"
# TDIGEST.MIN
# 语法
TDIGEST.MIN key
# 描述
返回 t-digest 草图中的最小观测值
# 参数
- key
键名
# 示例
> TDIGEST.CREATE t
OK
> TDIGEST.MIN t
"nan"
> TDIGEST.ADD t 3 4 1 2 5
OK
> TDIGEST.MIN t
"1"
# TDIGEST.QUANTILE
# 语法
TDIGEST.QUANTILE key quantile [quantile ...]
# 描述
对于每个输入的比例,返回一个浮点数估算值,该值表示小于给定比例观测值的数据点。支持在单次调用中同时获取多个分位数
# 参数
- key
键名
- quantile
检查输入的分数(比例)是否在 0 到 1 之间
# 示例
> TDIGEST.CREATE t COMPRESSION 1000
OK
> TDIGEST.ADD t 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
OK
> TDIGEST.QUANTILE t 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
1) "1"
2) "2"
3) "3"
4) "3"
5) "4"
6) "4"
7) "4"
8) "5"
9) "5"
10) "5"
11) "5"
# TDIGEST.RANK
# 语法
TDIGEST.RANK key value [value ...]
# 描述
对于每个输入的浮点数值,返回该值的估算排名(即草图中严格小于该值的观测值数量,加上等于该值的观测值数量的一半)。支持在单次调用中批量获取多个排名
# 参数
- key
键名
- value
是一个观测值的浮点数值
# 示例
> TDIGEST.CREATE s COMPRESSION 1000
OK
> TDIGEST.ADD s 10 20 30 40 50 60
OK
> TDIGEST.RANK s 0 10 20 30 40 50 60 70
1) (integer) -1
2) (integer) 0
3) (integer) 1
4) (integer) 2
5) (integer) 3
6) (integer) 4
7) (integer) 5
8) (integer) 6
redis> TDIGEST.REVRANK s 0 10 20 30 40 50 60 70
1) (integer) 6
2) (integer) 5
3) (integer) 4
4) (integer) 3
5) (integer) 2
6) (integer) 1
7) (integer) 0
8) (integer) -1
> TDIGEST.CREATE s COMPRESSION 1000
OK
> TDIGEST.ADD s 10 10 10 10 20 20
OK
> TDIGEST.RANK s 10 20
1) (integer) 2
2) (integer) 5
> TDIGEST.REVRANK s 10 20
1) (integer) 4
2) (integer) 1
# TDIGEST.RESET
# 语法
TDIGEST.RESET key
# 描述
重置 t-digest 草图:清空草图并重新初始化
# 参数
- key
键名
# 示例
> TDIGEST.RESET t
OK
# TDIGEST.REVRANK
# 语法
TDIGEST.REVRANK key value [value ...]
count]
# 描述
对于每个输入的浮点数值,返回该值的估算逆向排名(即草图中严格大于该值的观测值数量,加上等于该值的观测值数量的一半)。支持在单次调用中批量获取多个逆向排名
# 参数
- value
是一个观测值的浮点数值
- key
键名
# 示例
> TDIGEST.CREATE s COMPRESSION 1000
OK
> TDIGEST.ADD s 10 20 30 40 50 60
OK
> TDIGEST.RANK s 0 10 20 30 40 50 60 70
1) (integer) -1
2) (integer) 0
3) (integer) 1
4) (integer) 2
5) (integer) 3
6) (integer) 4
7) (integer) 5
8) (integer) 6
> TDIGEST.REVRANK s 0 10 20 30 40 50 60 70
1) (integer) 6
2) (integer) 5
3) (integer) 4
4) (integer) 3
5) (integer) 2
6) (integer) 1
7) (integer) 0
8) (integer) -1
> TDIGEST.CREATE s COMPRESSION 1000
OK
> TDIGEST.ADD s 10 10 10 10 20 20
OK
> TDIGEST.RANK s 10 20
1) (integer) 2
2) (integer) 5
> TDIGEST.REVRANK s 10 20
1) (integer) 4
2) (integer) 1
# TDIGEST.TRIMMED_MEAN
# 语法
TDIGEST.TRIMMED_MEAN key low_cut_quantile high_cut_quantile
# 描述
返回草图中均值的一个估算值,该估算会排除掉低于下限分位数和高于上限分位数的观测值
# 参数
- key
键名
- low_cut_quantile
一个范围在 [0..1] 之间的浮点数。该值必须小于 high_cut_quantile
- high_cut_quantile
一个范围在 [0..1] 之间的浮点数。该值必须大于 low_cut_quantile
# 示例
> TDIGEST.CREATE t COMPRESSION 1000
OK
> TDIGEST.ADD t 1 2 3 4 5 6 7 8 9 10
OK
> TDIGEST.TRIMMED_MEAN t 0.1 0.6
"4"
> TDIGEST.TRIMMED_MEAN t 0.3 0.9
"6.5"
> TDIGEST.TRIMMED_MEAN t 0 1
"5.5"
# TOPK.ADD
# 语法
TOPK.ADD key items [items ...]
# 描述
向 Top-k 草图中添加一个元素。支持同时批量添加多个元素。如果有元素被纳入 Top-k 草图,系统会返回因此被挤出的元素。这使得在元素进入或被挤出 Top-k 草图时,能够动态地检测出高频项
# 参数
- key
键名
- item
需要返回其数量的一个或多个项目
# 示例
> TOPK.ADD topk foo bar 42
1) (nil)
2) baz
3) (nil)
# TOPK.COUNT
# 语法
TOPK.COUNT key item [item ...]
# 描述
移除指定字典区间内的成员
# 参数
- key
键名
- item
需要返回其数量的一个或多个项目
# 示例
> TOPK.COUNT topk foo 42 nonexist
1) (integer) 3
2) (integer) 1
3) (integer) 0
# TOPK.INCRBY
# 语法
TOPK.INCRBY key item increment [item increment ...]
# 描述
将数据结构中某个元素的分数增加指定的增量。支持一次性批量增加多个元素的分数。如果有元素因此进入了 Top-K 列表,系统会返回被挤出的元素
# 参数
- item increment
一个或多个“元素-增量”对。每个元素都会按照其对应的增量进行增加。为避免服务器卡死,增量值必须大于或等于 1,且小于或等于 100,000
- key
键名
# 示例
> TOPK.INCRBY topk foo 3 bar 2 42 30
1) (nil)
2) (nil)
3) foo
# TOPK.INFO
# 语法
TOPK.INFO key
# 描述
返回指定草图的所需项数、宽度、深度及衰减值
# 参数
- key
键名
# 示例
TOPK.INFO topk
1) k
2) (integer) 50
3) width
4) (integer) 2000
5) depth
6) (integer) 7
7) decay
8) "0.92500000000000004"
# ZREVRANGE
# 语法
ZREVRANGE key start stop [WITHSCORES]
# 描述
返回 Top-K 草图中的完整元素列表
# 参数
- key
键名
- WITHCOUNT
同时也会返回每个元素的计数
# 示例
TOPK.LIST topk
1) foo
2) 42
3) bar
TOPK.LIST topk WITHCOUNT
1) foo
2) (integer) 12
3) 42
4) (integer) 7
5) bar
6) (integer) 2
# TOPK.QUERY
# 语法
TOPK.QUERY key item [item ...]
# 描述
检查一个或多个元素是否属于 Top-K 元素
# 参数
- key
键名
- item
需要返回其数量的一个或多个项目
# 示例
> TOPK.QUERY topk 42 nonexist
1) (integer) 1
2) (integer) 0
# TOPK.RESERVE
# 语法
TOPK.RESERVE key topk [width depth decay]
# 描述
使用指定的参数初始化一个 Top-K 草图
# 参数
- key
键名
- topk
需要保留的、出现频率最高的前 k 个元素的数量
- decay
在已占用的存储桶中,计数器发生衰减的概率为 decay ^ bucket[i].counter。随着计数器值的增大,发生衰减的可能性会逐渐降低
- width
每个数组中的计数器数量。该数值越大,估算的误差越小
- depth
计数器数组的数量。该数值越大,出现特定大小误差的概率就越低
# 示例
> TOPK.RESERVE topk 50 2000 7 0.925
OK