Redis List常用操作

列表:一个从左到右的队列,个人理解更类似于一个栈,常规模式下,先进列表的元素,后出。
表头元素:列表最左端第一个元素。
表尾元素:列表最右端的最后一个元素。不包含任何元素的列表成为空列表。

LPUSH key value [value …]
在指定Key所关联的List Value的头部插入参数中给出的所有Values。如果该Key不存在,该命令将在插入之前创建一个与该Key关联的空链表,之后再将数据从链表的头部插入。

127.0.0.1:6379> LPUSH mykey a b c d e f
(integer) 6

返回插入后链表中元素的数量。

LPUSHX key value
仅有当参数中指定的Key存在时,该命令才会在其所关联的List Value的头部插入参数中给出的Value,否则将不会有任何操作发生。

127.0.0.1:6379> LPUSHX mykey2 x 
(integer) 0
127.0.0.1:6379> keys *
1) "mykey"

返回插入后链表中元素的数量。

LRANGE key start stop
0表示链表头部(leftmost)的第一个元素。其中start的值也可以为负值,-1将表示链表中的最后一个元素,即尾部元素,-2表示倒数第二个并以此类推。该命令在获取元素时,start和end位置上的元素也会被取出。如果start的值大于链表中元素的数量,空链表将会被返回。如果end的值大于元素的数量,该命令则获取从start(包括start)开始,链表中剩余的所有元素。
取出前三个元素

127.0.0.1:6379> LRANGE mykey 0 2
1) "f"
2) "e"
3) "d"
取出所有元素
127.0.0.1:6379> LRANGE mykey 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"

LPOP key
返回并弹出指定Key关联的链表中的第一个元素,即头部元素。

127.0.0.1:6379> LRANGE mykey 0 -1
1) "f"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> LPOP mykey
"f"
127.0.0.1:6379> LRANGE mykey 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
5) "a"

LLEN key
返回指定Key关联的链表中元素的数量

127.0.0.1:6379> LLEN mykey
(integer) 5

LREM key count value
在指定Key关联的链表中,删除前count个值等于value的元素。如果count大于0,从头向尾遍历并删除,如果count小于0,则从尾向头遍历并删除。如果count等于0,则删除链表中所有等于value的元素。返回被删除的元素数量。

127.0.0.1:6379> LRANGE mykey 0 -1
1) "a"
2) "e"
3) "d"
4) "c"
5) "b"
6) "a"
127.0.0.1:6379> LREM mykey 2 a
(integer) 2
127.0.0.1:6379> LRANGE mykey 0 -1
1) "e"
2) "d"
3) "c"
4) "b"

LINDEX key index
该命令将返回链表中指定位置(index)的元素。

127.0.0.1:6379> LRANGE mykey 0 -1
1) "e"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> LINDEX mykey 0
"e"

LSET key index value

127.0.0.1:6379> LINDEX mykey 0
"xxoo"
127.0.0.1:6379> lset mykey 0 vinc
OK
127.0.0.1:6379> LINDEX mykey 0
"vinc"

LTRIM key start stop
该命令将仅保留指定范围内的元素。

127.0.0.1:6379> LRANGE mykey 0 -1
1) "vinc"
2) "d"
3) "c"
4) "b"
127.0.0.1:6379> LTRIM mykey 0 2
OK
127.0.0.1:6379> LRANGE mykey 0 -1
1) "vinc"
2) "d"
3) "c"

LINSERT key BEFORE|AFTER pivot value
该命令的功能是在pivot元素的前面或后面插入参数中的元素value。如果Key不存在,该命令将不执行任何操作。

127.0.0.1:6379> LRANGE mykey 0 -1
1) "vinc"
2) "d"
3) "c"
127.0.0.1:6379> LINSERT mykey before d 666
(integer) 4
127.0.0.1:6379> LRANGE mykey 0 -1
1) "vinc"
2) "666"
3) "d"
4) "c"

RPUSH key value [value …]
在指定Key所关联的List Value的尾部插入参数中给出的所有Values。如果该Key不存在,该命令将在插入之前创建一个与该Key关联的空链表,之后再将数据从链表的尾部插入。

RPUSHX key value
仅有当参数中指定的Key存在时,该命令才会在其所关联的List Value的尾部插入参数中给出的Value,否则将不会有任何操作发生。

RPOP key
返回并弹出指定Key关联的链表中的最后一个元素,即尾部元素。

RPOPLPUSH source destination
原子性的从与source键关联的链表尾部弹出一个元素,同时再将弹出的元素插入到与destination键关联的链表的头部。

127.0.0.1:6379> LRANGE mykey 0 -1
1) "c"
2) "vinc"
3) "666"
4) "d"
127.0.0.1:6379> RPOPLPUSH mykey mykey2
"d"
127.0.0.1:6379> LRANGE mykey2 0 -1
1) "d"
127.0.0.1:6379> LRANGE mykey 0 -1
1) "c"
2) "vinc"
3) "666"