*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 开销越高。需要在精度和性能之间权衡。