LINDEX:获取指定索引上的元素

Redis 列表包含的每个元素都有与之对应的正数索引和负数索引:

  • 正数索引从列表的左端开始计算,依次向右端递增:最左端元素的索引为 0,左端排行第二的元素索引为 1,左端排行第三的元素索引为 2,以此类推。最大的正数索引为列表长度减 1,即 N-1。

  • 负数索引从列表的右端开始计算,依次向左端递减:最右端元素的索引为 -1,右端排行第二的元素索引为 -2,右端排行第三的元素索引为 -3,以此类推。最大的负数索引为列表长度的负数,即 -N。

作为例子,图 4-17 展示了一个包含多个元素的列表,并给出了列表元素对应的正数索引和负数索引。

为了让用户可以方便地取得索引对应的元素,Redis 提供了 LINDEX 命令:

LINDEX list index

这个命令接受一个列表和一个索引作为参数,然后返回列表在给定索引上的元素;其中给定索引既可以是正数,也可以是负数。

image 2025 01 03 16 08 32 938
Figure 1. 图4-17 列表的索引

比如,对于前面展示的图 4-17,我们可以通过执行以下命令,取得 alphabets 列表在指定索引上的元素:

redis> LINDEX alphabets 0
"a"
redis> LINDEX alphabets 3
"d"
redis> LINDEX alphabets 6
"g"
redis> LINDEX alphabets -3
"f"
redis> LINDEX alphabets -7
"b"

处理超出范围的索引

对于一个长度为 N 的非空列表来说:

  • 它的正数索引必然大于等于 0,并且小于等于 N-1。

  • 它的负数索引必然小于等于 -1,并且大于等于 -N。

如果用户给定的索引超出了这一范围,那么 LINDEX 命令将返回空值,以此来表示给定索引上并不存在任何元素:

redis> LINDEX alphabets 100
(nil)
redis> LINDEX alphabets -100
(nil)

其它信息

  • 复杂度:O(N),其中 N 为给定列表的长度。

  • 版本要求:LINDEX 命令从 Redis 1.0.0 版本开始可用。