*Redis CMS.INITBYPROB 命令

CMS.INITBYPROB 根据目标误差率(error)和误差概率(probability)初始化一个 Count-Min Sketch。


*语法

CMS.INITBYPROB key error probability

*参数说明

参数 类型 必填 说明
key String Sketch 的键名
error Float 误差估计大小,占总计数的百分比。影响 sketch 的宽度(width)
probability Float 误差概率(期望的误判概率),介于 0 和 1 之间的十进制值。影响 sketch 的深度(depth)。例如,期望误判率为 0.1%(千分之一)时,设置为 0.001。该值越接近 0,每项内存占用和 CPU 开销越高

*返回值

  • OK:初始化成功
  • Error:参数错误、键已存在且非 CMS 类型,或内存不足

*时间复杂度

O(1)

*

*示例

*基本初始化(1% 误差,1% 误判概率)

> CMS.INITBYPROB test 0.01 0.01
OK

*高精度初始化(0.1% 误差,0.1% 误判概率)

> CMS.INITBYPROB high_precision 0.001 0.001
OK

*检查已存在的键会报错

> CMS.INITBYPROB test 0.01 0.01
(error) ERR key already exists

*常见错误

错误 原因 解决
ERR wrong number of arguments 参数数量不足 检查 error 和 probability 是否都已提供
ERR key already exists key 已存在 更换 key 名,或先 DEL 删除旧 key
ERR value is not a valid float error 或 probability 不是有效浮点数 确保传入的是合法的十进制数字
WRONGTYPE key 已存在但不是 CMS 类型 更换 key 名

*最佳实践

  • 误差概率选择:根据业务可容忍的误差范围选择 error 和 probability。越接近 0 精度越高,但内存和 CPU 开销越大
  • 生产环境推荐:error=0.001(0.1%)、probability=0.01(1%)为常用平衡点
  • 初始化前确认 key 不存在,避免覆盖其他数据结构
  • 建议先用 EXISTS key 检查,再执行初始化

*FAQ

Q1: CMS.INITBYPROB 和 CMS.INITBYDIM 有什么区别? A: CMS.INITBYPROB 通过误差率和概率自动计算 width 和 depth;CMS.INITBYDIM 直接指定 width 和 depth 维度。前者更直观,后者更精确控制内存。

Q2: probability 和 error 的含义是什么? A: error 表示估计误差占总计数的百分比;probability 表示出现超过该误差的概率。例如 error=0.001、probability=0.01 表示:99% 的情况下误差不超过总计数的 0.1%。

Q3: probability 越小,内存占用越大吗? A: 是的。probability 越接近 0,depth 越深,每项的内存占用和 CPU 开销越高。需要在精度和性能之间权衡。