*Redis CMS.INITBYDIM 命令

CMS.INITBYDIM 使用用户指定的宽度(width)和深度(depth)初始化一个 Count-Min Sketch。


*语法

CMS.INITBYDIM key width depth

*参数说明

参数 类型 必填 说明
key String Sketch 的键名
width Integer 每个计数器数组的长度。width 越大,误差越小
depth Integer 计数器数组的数量。depth 越大,误差概率越低

*返回值

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

*时间复杂度

O(1)

*

*示例

*基本初始化

> CMS.INITBYDIM test 2000 5
OK

*大精度 Sketch

> CMS.INITBYDIM large_sketch 10000 10
OK

*检查已存在的键会报错

> CMS.INITBYDIM test 2000 5
(error) ERR key already exists

*常见错误

错误 原因 解决
ERR wrong number of arguments 参数数量不足 检查 width 和 depth 是否都已提供
ERR key already exists key 已存在 更换 key 名,或先 DEL 删除旧 key
ERR value is not an integer width 或 depth 不是整数 确保传入的是整数
WRONGTYPE key 已存在但不是 CMS 类型 更换 key 名

*最佳实践

  • width 和 depth 的权衡:width 增大可减小误差,depth 增大可降低误差概率。根据业务精度需求选择
  • 初始化前确认 key 不存在,避免覆盖其他数据结构
  • 小数据量建议用 CMS.INITBYPROB(按误差概率初始化)更直观
  • 生产环境建议设置合理的 width/depth,过大将浪费内存

*FAQ

Q1: CMS.INITBYDIM 和 CMS.INITBYPROB 有什么区别? A: CMS.INITBYDIM 直接指定 width 和 depth 维度;CMS.INITBYPROB 根据目标误差率(error)和概率(probability)自动计算 width 和 depth。

Q2: width 和 depth 推荐值是多少? A: width 建议 2000 以上,depth 建议 5 以上。对于千万级数据,width 可选 10000+,depth 10+。具体取决于可接受的误差范围。

Q3: 初始化后 sketch 占多大内存? A: 内存占用约为 width × depth × 8 字节(每个计数器 64 位)。例如 width=2000, depth=5 约占用 80 KB。