Redis LPOS 命令返回列表 key 中匹配给定 element 成员的索引。 默认的,当没有其它参数选项时,LPOS 从列表头部开始扫描,直到列表尾部,查找第一个与匹配"element"的成员。
如果找到匹配的成员,返回这个成员的索引(从零开计数),如果找不到匹配的成员返回 NULL。
> RPUSH mylist a b c 1 2 3 c c
> LPOS mylist c
2
带参数的命令可以有更多的功能。
LPOS 的 RANK
选项表示返回第几个匹配的元素,即如果有列表中有多个元素匹配,那么 rank 为 1 时返回第一个匹配的元素, rank 为 2 时返回第二个匹配的元素,以此类推。
例如,在上面的例子中,成员 "c" 出现了多次,如果想返回第二个匹配的 "c" 的索引,可以也这样写:F
> LPOS mylist c RANK 2
6
第二个 "c" 的位置索引是 6。
负值 RANK
参数表示换一个搜索方向,从列表尾部想列表头部搜索。
所以,查找列中中尾部开始第一个匹配的元素命令:
> LPOS mylist c RANK -1
7
需要注意的是返回的索引还是从列表头开始,从零开始计数。无论 RANK
值正负,索引的值是固定的。
有时我们不是想返回第 N 个匹配的成员,而是想返回前 N 个匹配的成员。
可以使用LPOS
的 COUNT
选项。
> LPOS mylist c COUNT 2
[2,6]
我们可以组合使用 COUNT
和RANK
,COUNT
表示返回要匹配的总数,RANK
表示从第几个匹配开始计算。
> LPOS mylist c RANK -1 COUNT 2
[7,6]
COUNT
为 0 时表示返回所有匹配成员的索引数组。
> LPOS mylist c COUNT 0
[2,6,7]
使用 COUNT
且没有匹配成员的情况下,返回空数组。没有使用 COUNT
且没有匹配成员的情况下,返回NULL。
LPOS 的 MAXLEN
选项表示只查找最多 len 个成员。例如t MAXLEN 1000
表示之查找前 1000 个成员,这样可以提高查询效率,如果我们想在一个大的列表中,尽快找到匹配的元素,这样做效率最高。
*返回值
返回整数表示匹配元素的位置,返回null表示没有找到匹配元素。使用 COUNT
选项时返回数据(空数组表示无匹配)。
*例子
(integer) 11redis> LPOS mylist 3
(integer) 6redis> LPOS mylist 3 COUNT 0 RANK 2
1) (integer) 8 2) (integer) 9 3) (integer) 10