LPOS
返回列表中匹配元素的索引。
语法
LPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]
引入版本:6.0.6
复杂度摘要:O(N)
该命令返回 Redis 列表中匹配元素的索引。默认情况下,当没有给出任何选项时,它将从头到尾扫描列表,寻找 element 的第一个匹配项。如果找到 element,则返回其索引(列表中从零开始的位置)。否则,如果未找到匹配项,则返回 nil。
必需参数
key
保存列表的键的名称。
element
要搜索的值。
可选参数
RANK rank
返回的第一个匹配的排名:1 是从头部开始的第一个匹配,-1 是从尾部开始的第一个匹配。
COUNT num-matches
返回的匹配数。 0 返回所有匹配项。
MAXLEN len
最多比较 len 个元素。 0(默认)扫描整个列表。
详细说明
可选参数和选项可以修改命令的行为。 RANK 选项指定当存在多个匹配项时要返回的第一个元素的排名。等级 1 表示返回第一个匹配项,2 表示返回第二个匹配项,依此类推。
在上面的示例中,元素 c 出现了多次。如果您想要第二场比赛的索引,请编写:
> RPUSH mylist a b c 1 2 3 c c
> LPOS mylist c RANK 2
6
也就是说,第二次出现的 c 位于位置 6。负整数作为 RANK 参数告诉 LPOS 反转搜索方向,从尾部开始到头部。
获取从列表尾部开始的第一个元素位置:
> LPOS mylist c RANK -1
7
请注意,索引是从零开始的,因此从列表头部开始的第一个元素位于索引 0 处,下一个元素位于索引 1 处,依此类推。这意味着无论排名是正还是负,返回的索引都是稳定的。
有时您不仅想要获取第 N 个匹配元素,还想要获取所有前 N 个匹配元素的位置。这可以使用 COUNT 选项来实现。
> LPOS mylist c COUNT 2
[2,6]
您可以组合 COUNT 和 RANK,以便 COUNT 将尝试返回指定数量的匹配项,但从第 N 个匹配项开始,如 RANK 选项指定的那样。
> LPOS mylist c RANK -1 COUNT 2
[7,6]
当使用 COUNT 时,可以指定 0 作为匹配数,以此告诉命令您希望将找到的所有匹配项作为索引数组返回。这比给出一个非常大的 COUNT 选项更好,因为它更通用。
> LPOS mylist c COUNT 0
[2,6,7]
当使用COUNT且未找到匹配项时,返回空数组。但是,当未使用 COUNT 并且没有匹配项时,该命令将返回 nil。
最后,MAXLEN 选项告诉命令仅将提供的元素与给定的最大数量的列表项进行比较。例如,指定 MAXLEN 1000 将确保该命令仅执行 1000 次比较,从而有效地在列表的子集上运行算法(第一部分或最后一部分取决于正排名或负排名)。这对于限制命令的最大复杂性很有用。当您期望很早找到匹配项时,它也很有用,但您希望确保万一情况并非如此,该命令不会花费太多时间来运行。
当使用MAXLEN时,可以指定0作为最大比较次数,以此告诉命令您想要无限次比较。这比给出一个非常大的 MAXLEN 选项更好,因为它更通用。
示例
redis> RPUSH mylist a b c d 1 2 3 4 3 3 3
(integer) 11
redis> LPOS mylist 3
(integer) 6
redis> LPOS mylist 3 COUNT 0 RANK 2
1) (integer) 8
2) (integer) 9
3) (integer) 10
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis Cloud |
说明 |
|---|---|---|
| ✅ 标准 |
✅ 标准 |
返回值
RESP2
以下任意一项: * 无回复:如果没有匹配元素。 * 整数回复:代表匹配元素的整数。 * 数组回复:如果给出了 COUNT 选项,则表示匹配元素的整数数组(如果没有匹配则为空数组)。
RESP3
以下任意一项: * 空回复:如果没有匹配元素。 * 整数回复:代表匹配元素的整数。 * 数组回复:如果给出了 COUNT 选项,则表示匹配元素的整数数组(如果没有匹配则为空数组)。
资料来源:Redis 官方 LPOS 文档;中文内容参考 Redis 文档许可。