*Redis TOPK.INCRBY 命令

TOPK.INCRBY 将 Top-K 结构中指定元素的计数增加指定的整数值。


*语法

TOPK.INCRBY key item increment [item increment ...]

*参数说明

参数 类型 必填 说明
key String Top-K 结构键名
item String / Bytes 要增加计数的元素
increment Integer 增加的计数值,支持负数

*返回值

  • Array:对每个 item,返回被挤出 Top-K 列表的元素名;若未挤出任何元素,返回空字符串

*时间复杂度

O(k × depth × M),M 为 item-increment 对数。单个元素为 O(k × depth)。


*示例

*单个元素增加计数

> TOPK.RESERVE mytopk 3 100 5 0.9
OK
> TOPK.INCRBY mytopk apple 5
1) ""
> TOPK.COUNT mytopk apple
(integer) 5

*批量增加计数

> TOPK.INCRBY mytopk banana 3 cherry 2 date 1
1) ""
2) ""
3) ""

*观察元素被挤出

> TOPK.INCRBY mytopk fig 10
1) "date"

*常见错误

错误 原因 解决
ERR wrong number of arguments item 和 increment 未成对 确保每对 item-increment 完整
ERR increment is not an integer increment 不是整数 传入整数值
WRONGTYPE key 不是 Top-K 类型 确认 key 由 TOPK.RESERVE 创建
ERR key does not exist Top-K 结构不存在 先用 TOPK.RESERVE 初始化

*最佳实践

  • 适用场景:需要按权重增加元素频率的场景,如用户评分加权、流量按字节数统计
  • 支持负值 increment,可用于递减或纠错场景
  • 批量操作可减少网络往返,提升写入性能
  • TOPK.ADD 的区别:ADD 每次只增加 1,INCRBY 可自定义增量值

*FAQ

Q1: TOPK.INCRBY 和 TOPK.ADD 有什么区别? A: TOPK.ADD 每次对元素计数 +1;TOPK.INCRBY 可以按指定数值增减,适合加权统计。

Q2: increment 可以是负数吗? A: 可以,负值会减少元素计数。但如果计数归零,元素不会立即从 Top-K 中移除,需由新元素挤出。

Q3: 返回的被挤出元素是输入的元素吗? A: 不一定。返回的是因当前增量操作导致排名下降而被挤出 Top-K 列表的其他元素。