*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。