现在的位置: 首页 > 综合 > 正文

Redis命令详解-List

2014年09月05日 ⁄ 综合 ⁄ 共 4044字 ⁄ 字号 评论关闭

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 一个值。

2.lpushx key value 

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

返回值

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

3.lrange key start end 

返回存储在 key 的列表里指定范围内的元素。 start 和 end 偏移量都是基于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会当它是最后一个元素的下标。

返回值

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

4.lpop key 

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

返回值

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

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

返回值

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

6.lset key index value 

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

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

返回值

状态回复

7.ltrim key start end 

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

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

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

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

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

LPUSH mylist someelement
LTRIM mylist 0 99

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

返回值

状态回复

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 单一个值。

9.rpop key

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

返回值

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

10.rpoplpush key1 key2 

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

For example: consider source holding the list a,b,c,
and destination holding the list x,y,z.
Executing RPOPLPUSH results insource holding a,b and destination holding c,x,y,z.

If source does not exist, the value nil is
returned and no operation is performed. If source and destination are
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.

11.rpush key value 

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

返回值

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

12.lindex key index

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

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

返回值

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

13.linsert key before|after value1 value2

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

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

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

返回值

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

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


抱歉!评论已关闭.