*Redis LPOS 命令 返回列表中匹配元素的索引位置

*LPOS

*语法

LPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]

*说明

LPOS 返回列表 key 中第一个匹配 element 的元素的索引。

默认情况下,命令从列表头部向尾部扫描,返回第一个匹配元素的索引(从 0 开始计数)。如果未找到匹配元素,返回 nil

支持以下可选参数:

  • **RANK rank**:指定返回第 rank 个匹配的元素。rank 为正数时从左向右计数,为负数时从右向左计数。例如 RANK 2 返回第二个匹配,RANK -1 返回从尾部开始的第一个匹配。
  • **COUNT num-matches**:返回最多 num-matches 个匹配索引的数组。COUNT 0 表示返回所有匹配的索引。
  • **MAXLEN len**:仅扫描列表的前 len 个元素,用于在大列表中提高查找效率。

*示例

# 构建测试列表: ["a", "b", "c", "1", "2", "3", "c", "c"]
redis-cli RPUSH mylist a b c 1 2 3 c c

# 返回第一个 "c" 的索引
redis-cli LPOS mylist c

# 返回第二个 "c" 的索引
redis-cli LPOS mylist c RANK 2

# 从尾部开始第一个 "c" 的索引
redis-cli LPOS mylist c RANK -1

# 返回所有 "c" 的索引
redis-cli LPOS mylist c COUNT 0

# 组合使用:从倒数第一个匹配开始,最多返回 2 个
redis-cli LPOS mylist c RANK -1 COUNT 2

*返回值

  • Integer reply:匹配元素的索引(未使用 COUNT 且找到匹配时)。
  • Array reply:匹配索引的数组(使用 COUNT 时)。
  • Nil reply:未找到匹配元素(未使用 COUNT 时)。
  • Empty array:未找到匹配元素(使用 COUNT 时)。

*版本兼容性

版本 说明
>= 6.0.6 可用
< 6.0.6 不支持

*时间复杂度

O(N),其中 N 为扫描的元素数量,受 MAXLEN 限制(若指定)。