Redis命令详解-List

1.lpush key value value``````

将所有指定的值插入到存于key的列表的头部。如果key不存在,那么在进行 push 操作前会创建一个空列表。 如果key对应的值不是一个 list 的话,那么会返回一个错误。

可以使用一个命令把多个元素 push 进入列表,只需在命令末尾加上多个指定的参数。元素是从最左端的到最右端的、一个接一个被插入到 list 的头部。 所以对于这个命令例子LPUSH mylist a b c,返回的列表是c为第一个元素,b为第二个元素,a为第三个元素。

返回值

整型回复: 在 push 操作后的 list 长度。

历史

  • >= 2.4: 接受多个value参数。版本老于 2.4 的 Redis 只能每条命令 push 一个值。
Redis命令详解-List


2.lpushx key value

只有当key已经存在并且存着一个 list 的时候,在这个key下面的 list 的头部插入value。 与LPUSH相反,当key不存在的时候不会进行任何操作。

返回值

整型回复: 在 push 操作后的 list 长度。

Redis命令详解-List


3.lrange key start end

返回存储在key的列表里指定范围内的元素。startend偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。

偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如,-1表示列表的最后一个元素,-2是倒数第二个,以此类推。

在不同编程语言里,关于求范围函数的一致性

需要注意的是,如果你有一个list,里面的元素是从0到100,那么LRANGE list 0 10这个命令会返回11个元素,即最右边的那个元素也会被包含在内。 在你所使用的编程语言里,这一点可能是也可能不是跟那些求范围有关的函数都是一致的。(像Ruby的Range.newArray#slice或者Python的range()函数。)

超过范围的下标

当下标超过list范围的时候不会产生error。 如果start比list的尾部下标大的时候,会返回一个空列表。 如果stop比list的实际尾部大的时候,Redis会当它是最后一个元素的下标。

返回值

多批量回复: 指定范围里的列表元素。

Redis命令详解-List


4.lpop key

移除并且返回key对应的 list 的第一个元素。

返回值

批量回复: 返回第一个元素的值,或者当key不存在时返回nil

Redis命令详解-List



5.lrem key count value

从存于key的列表里移除前count次出现的值为value的元素。 这个count参数通过下面几种方式影响这个操作:

  • count > 0: 从头往尾移除值为value的元素。
  • count < 0: 从尾往头移除值为value的元素。
  • count = 0: 移除所有值为value的元素。

比如,LREM list -2 "hello"会从存于list的列表里移除最后两个出现的"hello"

需要注意的是,如果list里没有存在key就会被当作空list处理,所以当key不存在的时候,这个命令会返回0

返回值

整型回复: 被移除的元素个数。

Redis命令详解-List



6.lset key index value

设置index位置的list元素的值为value。 更多关于index参数的信息,详见LINDEX

当index超出范围时会返回一个error。

返回值

状态回复

Redis命令详解-List


7.ltrim key start end

修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。startstop都是由0开始计数的, 这里的0是列表里的第一个元素(表头),1是第二个元素,以此类推。

例如:LTRIM foobar 0 2将会对存储在foobar的列表进行修剪,只保留列表里的前3个元素。

startend也可以用负数来表示与表尾的偏移量,比如-1表示列表里的最后一个元素,-2表示倒数第二个,等等。

超过范围的下标并不会产生错误:如果start超过列表尾部,或者start > end,结果会是列表变成空表(即该 key 会被移除)。 如果end超过列表尾部,Redis 会将其当作列表的最后一个元素。

LTRIM的一个常见用法是和LPUSH/RPUSH一起使用。 例如:

LPUSH mylist someelement
LTRIM mylist 0 99

这一对命令会将一个新的元素 push 进列表里,并保证该列表不会增长到超过100个元素。这个是很有用的,比如当用 Redis 来存储日志。 需要特别注意的是,当用这种方式来使用LTRIM的时候,操作的复杂度是O(1), 因为平均情况下,每次只有一个元素会被移除。

返回值

状态回复

Redis命令详解-List


8.rpush key vaue value`````

向存于key的列表的尾部插入所有指定的值。如果key不存在,那么会创建一个空的列表然后再进行 push 操作。 当key保存的不是一个列表,那么会返回一个错误。

可以使用一个命令把多个元素打入队列,只需要在命令后面指定多个参数。元素是从左到右一个接一个从列表尾部插入。 比如命令RPUSH mylist a b c会返回一个列表,其第一个元素是a,第二个元素是b,第三个元素是c

返回值

整型回复: 在 push 操作后的列表长度。

历史

  • >= 2.4: 接受多个value参数。 在老于 2.4 的 Redis 版本中,一条命令只能 push 单一个值。
Redis命令详解-List


9.rpop key

移除并返回存于key的 list 的最后一个元素。

返回值

批量回复: 最后一个元素的值,或者当key不存在的时候返回nil

Redis命令详解-List


10.rpoplpush key1 key2

Atomically returns and removes the last element (tail) of the list stored atsource, and pushes the element at the first element (head) of the list stored atdestination.

For example: considersourceholding the lista,b,c, anddestinationholding the listx,y,z. ExecutingRPOPLPUSHresults insourceholdinga,banddestinationholdingc,x,y,z.

Ifsourcedoes not exist, the valuenilis returned and no operation is performed. Ifsourceanddestinationare the same, the operation is equivalent to removing the last element from the list and pushing it as first element of the list, so it can be considered as a list rotation command.

Return value

Bulk reply: the element being popped and pushed.

Redis命令详解-List


11.rpush key value

将值value插入到列表key的表尾, 当且仅当key存在并且是一个列表。 和RPUSH命令相反, 当key不存在时,RPUSHX 命令什么也不做。

返回值

Integer: RPUSHX 命令执行之后,表的长度。

Redis命令详解-List


12.lindex key index

返回列表里的元素的索引index存储在key里面。 下标是从0开始索引的,所以0是表示第一个元素,1表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素。在这种方法下,-1表示最后一个元素,-2表示倒数第二个元素,并以此往前推。

key位置的值不是一个列表的时候,会返回一个error。

返回值

批量回复:请求的对应元素,或者当index超过范围的时候返回nil

Redis命令详解-List


13.linsert key before|after value1 value2

value插入存于key的列表中在基准值pivot的前面或后面。

key不存在时,这个list会被看作是空list,任何操作都不会发生。

key存在,但保存的不是一个list的时候,会返回error。

返回值

整型回复: 经过插入操作后的list长度,或者当pivot值找不到的时候返回-1


Redis命令详解-List


注:本文的命令详解主要来源redis中文官网,这里是进一步整理供学习和以后查询使用。