LPOS

语法
LPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]
从以下位置开始可用:
6.0.6
时间复杂度:
O(N),其中 N 是列表中元素的数量,对于平均情况。在列表的 head 或 tail 附近搜索元素时,或者当提供 MAXLEN 选项时,该命令可能会以恒定时间运行。
ACL 类别:
@read, @list, @slow,

该命令返回 Redis 列表中匹配元素的索引。 默认情况下,当没有给出任何选项时,它会从头到尾扫描列表, 查找 “element” 的第一个匹配项。如果找到该元素,则返回其索引(列表中从 0 开始的位置)。否则,如果未找到匹配项,则nil返回。

> RPUSH mylist a b c 1 2 3 c c
> LPOS mylist c
2

可选参数和选项可以修改命令的行为。 这RANKoption 指定要返回的第一个元素的 “rank” ,以防有多个匹配项。排名 1 表示返回第一个匹配项,2 表示返回第二个匹配项,依此类推。

例如,在上面的示例中,元素 “c” 多次出现,如果我想要第二个匹配项的索引,我会写:

> LPOS mylist c RANK 2
6

也就是说,“c” 的第二次出现位于位置 6。 负 “rank” 作为RANKargument 告诉LPOS反转搜索方向,从 tail 到 head。

所以,我们想说,给我从列表尾部开始的第一个元素:

> LPOS mylist c RANK -1
7

请注意,索引仍然以“自然”方式报告,即考虑从索引 0 处的列表头开始的第一个元素,索引 1 处的下一个元素,依此类推。这基本上意味着,无论排名是正还是负,返回的索引都是稳定的。

有时我们不仅要返回第 N 个匹配元素,还要返回所有前 N 个匹配元素的位置。这可以使用COUNT选择。

> LPOS mylist c COUNT 2
[2,6]

我们可以结合COUNTRANK因此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.

最后,MAXLENoption 指示命令仅将提供的元素与给定的最大列表项数进行比较。因此,例如,指定MAXLEN 1000将确保该命令仅执行 1000 次比较,有效地在列表的子集上运行算法(第一部分或最后一部分,取决于我们使用正或负秩的事实)。这对于限制命令的最大复杂性非常有用。当我们期望很早就找到匹配项,但希望确保在这不是真的情况下,命令不会花费太多时间来运行时,它也很有用。

什么时候MAXLEN,则可以指定 0 作为最大比较次数,以此来告诉命令我们想要无限次比较。这比给一个非常大的MAXLEN选项,因为它更通用。

例子

RPUSH mylist a b c d 1 2 3 4 3 3 3 3 LPOS mylist 3 LPOS mylist 3 计数 0 排名 2

RESP2 回复

以下任何一项:

  • nil 回复:如果没有匹配的元素。
  • Integer reply:表示匹配元素的整数。
  • 数组回复:如果给出了 COUNT 选项,则表示匹配元素的整数数组(如果没有匹配项,则为空数组)。

RESP3 回复

以下任何一项:

  • Null 回复:如果没有匹配的元素。
  • Integer reply:表示匹配元素的整数。
  • 数组回复:如果给出了 COUNT 选项,则表示匹配元素的整数数组(如果没有匹配项,则为空数组)。

为本页评分
返回顶部 ↑