*Redis TOPK.RESERVE 命令

TOPK.RESERVE 创建一个 Top-K 概率数据结构,用于近似统计高频元素。


*语法

TOPK.RESERVE key k width depth decay

*参数说明

参数 类型 必填 说明
key String Top-K 结构键名
k Integer Top-K 列表中保留的元素数量
width Integer 每个深度层级的计数器数量,控制精度
depth Integer 哈希函数(层级)数量,控制冲突概率
decay Double 衰减因子,范围 0~1,用于计数器老化

*返回值

  • OK:创建成功
  • Error:参数错误、key 已存在或内存不足

*时间复杂度

O(1)

*

*示例

*创建 Top-K 结构

> TOPK.RESERVE mytopk 50 100 5 0.9
OK

*创建用于热门商品统计的 Top-K

> TOPK.RESERVE hot_products 10 200 7 0.925
OK

*创建用于日志分析的 Top-K

> TOPK.RESERVE error_ips 100 1000 10 0.95
OK

*常见错误

错误 原因 解决
ERR wrong number of arguments 缺少必要参数 确保传入 k、width、depth、decay 四个参数
ERR Top-K item must be greater than 0 k 小于等于 0 k 必须为正整数
ERR Top-K width must be greater than 0 width 小于等于 0 width 必须为正整数
ERR Top-K depth must be greater than 0 depth 小于等于 0 depth 必须为正整数
ERR Top-K decay must be in [0, 1] decay 超出范围 decay 必须在 0 到 1 之间
ERR key already exists 键名已存在 使用其他键名,或先 DEL 旧键

*最佳实践

  • 适用场景:热门查询统计、热门商品排行、异常 IP 发现、日志高频错误分析
  • 参数调优
    • k 根据实际需要的 Top 数量设置
    • width 越大精度越高,内存消耗也越大(建议 100~1000)
    • depth 建议 5~10,深度越大冲突概率越低
    • decay 通常设为 0.9~0.99,越小对新数据越敏感
  • 内存估算:内存占用与 k × width × depth 成正比
  • 生产环境创建前确认 key 不存在,避免覆盖

*FAQ

Q1: Top-K 和 Sorted Set 有什么区别? A: Top-K 是概率数据结构,使用固定内存近似统计高频项,适合海量数据流;Sorted Set 是精确结构,内存随元素增长。

Q2: decay 参数如何影响结果? A: decay 控制计数器衰减速度。值越小,旧数据遗忘越快,对新热点更敏感;值越大,历史数据权重越高,结果更稳定。

Q3: 如何查看 Top-K 的内存占用? A: 使用 MEMORY USAGE key 查看具体内存消耗,或用 TOPK.INFO key 查看结构参数。