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

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

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

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

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


图 4-17 列表的索引_images/IMAGE_LINDEX.jpeg


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

  1. LINDEX list index

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

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

  1. redis> LINDEX alphabets 0
  2. "a"
  3.  
  4. redis> LINDEX alphabets 3
  5. "d"
  6.  
  7. redis> LINDEX alphabets 6
  8. "g"
  9.  
  10. redis> LINDEX alphabets -3
  11. "f"
  12.  
  13. redis> LINDEX alphabets -7
  14. "b"

处理超出范围的索引

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

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

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

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

  1. redis> LINDEX alphabets 100
  2. (nil)
  3.  
  4. redis> LINDEX alphabets -100
  5. (nil)

其他信息

属性
复杂度O(N) ,其中 N 为给定列表的长度。
版本要求LINDEX 命令从 Redis 1.0.0 版本开始可用。