*Redis ARSEEK 命令

ARSEEK 在数组中搜索指定元素并返回其索引。


*语法

ARSEEK key element [RANK rank] [COUNT count]

*参数说明

参数 类型 必填 说明
key String 数组键名
element String / Bytes 要搜索的元素值
RANK rank Integer 返回第 rank 个匹配的索引(默认 1,支持负数从后往前数)
COUNT count Integer 最多返回 count 个匹配索引,默认 1

*返回值

  • Integer:元素的索引位置(0-based)
  • Array:COUNT > 1 时返回索引数组
  • Nil:元素不存在或 key 不存在
  • Error:key 存储的不是 Array 类型

*时间复杂度

O(N),N 为数组长度(需要线性搜索)。


*示例

*基本查找

> ARSET letters "a" "b" "c" "d" "e"
OK
> ARSEEK letters "c"
(integer) 2

*查找重复元素的第 N 个

> ARSET nums "1" "2" "1" "3" "1"
OK
> ARSEEK nums "1" RANK 2
(integer) 2
> ARSEEK nums "1" RANK -1
(integer) 4

*返回多个匹配索引

> ARSEEK nums "1" COUNT 3
1) (integer) 0
2) (integer) 2
3) (integer) 4

*常见错误

错误 原因 解决
WRONGTYPE key 不是 Array 类型 确认 key 的数据类型
ERR value is not an integer RANK/COUNT 非整数 传入整数值

*最佳实践

  • 频繁查找考虑维护辅助索引(如 Hash 映射值到索引)
  • RANK 负数方便查找最后一个匹配
  • COUNT 配合可获取所有匹配位置

*FAQ

Q1: ARSEEK 和 ARGREP 有什么区别? A: ARSEEK 按精确值查找返回索引;ARGREP 按模式匹配返回元素值。

Q2: 元素不存在返回什么? A: 返回 (nil),不报错。

Q3: RANK 超出匹配数量怎么办? A: 返回 (nil)。例如数组中只有两个匹配,RANK 3 返回 nil。