Redis中文官网命令大全

list命令汇总

部分操作在链表命令里有两个版本,例如lpush和rpush,本质都是新增节点,只不过lpush是在链表左侧新增节点,rpush是正在链表右侧新增节点,即链表头尾。

命令

语法

语义

lpush

lpush key value [value …]

将value值封装为节点后(后简称节点)依序加入到链表头/最左侧

rpush

rpush key value [value …]

将节点依序加入到链表尾/最右侧

lpushx

lpushx key value

如果存在链表key,则将节点加入到链表头,如果不存在则什么也不做

rpushx

rpushx key value

如果存在链表key,则将节点加入到链表尾,如果不存在则什么也不做

linsert

linsert key BEFORE|AFTER pivot value

将节点加入到值为pivot的节点之前|之后,如果不存在值为pivot的节点则什么也不做

lpop

lpop key

删除左侧的第一个节点/头节点,并将其返回

rpop

rpop key

删除右侧的第一个节点/尾节点,并将其返回

lrem

lrem key count value

删除链表key中count个值为value的节点,若count为0,则全部删除,若count为负数则取绝对值

ltrim

ltrim key start stop

只保留链表key中从start下标到stop下标区间的节点,其余节点删除,包括下标start和stop

llen

llen key

返回目标链表长度

lrange

lrange key start stop

返回链表key从start下标到stop下标区间的节点值,包括下标start和stop

lindex

lindex key index

返回链表key中下标为index的节点值

lset

lset key index value

设置链表key下标为index的节点值为value

rpoplpush

rpoplpush source destination

移除链表source的尾节点,并将节点加入到链表destination头部,并返回

命令演示

增加命令

push

使用lpush向链表头加入新节点,即头插法新增节点,比如使用lpush list1 v1 v2 v3,实际链表中前三个节点的顺序应该是v3 v2 v1,如果原本没有目标链表key,则创建一个。

使用rpush向链表尾加入新节点,即尾插法新增节点,如果原本没有目标链表key,则创建一个。

示例如下,命令执行之前数据库为空,即没有链表list1,注意示例中最后呈现的链表节点顺序。

127.0.0.1:6379> lpush list1 v1 v2 v3
(integer) 3
127.0.0.1:6379> rpush list1 v4 v5 v6
(integer) 6
127.0.0.1:6379> lrange list1 0 -1
1) "v3"
2) "v2"
3) "v1"
4) "v4"
5) "v5"
6) "v6"

————————————————————————————————————————
lpushx和rpushx一样,只是与lpush或rpush有些许不同,即如果不存在目标链表key,不会新建链表key,什么也不做。

127.0.0.1:6379> keys *
1) "list1"
127.0.0.1:6379> lpushx list2 v1
(integer) 0
127.0.0.1:6379> rpushx list1 v7
(integer) 7
127.0.0.1:6379> lrange list1 0 -1
1) "v3"
2) "v2"
3) "v1"
4) "v4"
5) "v5"
6) "v6"
7) "v7"

linsert

使用linsert可以在链表中的目标节点的前或后一位插入新的节点,如果目标链表key不存在,或者目标节点值pivot不存在,则什么也不做。

127.0.0.1:6379> lrange list1 0 -1
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> linsert list1 before v2 newvalue1
(integer) 4
127.0.0.1:6379> linsert list1 after v2 newvalue2
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "v1"
2) "newvalue1"
3) "v2"
4) "newvalue2"
5) "v3"

删除命令

pop

使用lpop弹出链表头节点,使用rpop弹出链表尾节点,如果没有目标链表key,则什么也不做。

127.0.0.1:6379> lrange list1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
127.0.0.1:6379> lpop list1
"v1"
127.0.0.1:6379> rpop list1
"v4"
127.0.0.1:6379> lrange list1 0 -1
1) "v2"
2) "v3"

lrem

使用lrem可以删除目标链表key中count的绝对值个值为value的节点,count为0时将值为value的节点全部删除,若不存在目标链表key或不存在值为value的节点则什么也不做。

127.0.0.1:6379> lrange list1 0 -1
 1) "v1"
 2) "v1"
 3) "v1"
 4) "v1"
 5) "v1"
 6) "v1"
 7) "v1"
 8) "v1"
 9) "v1"
10) "v1"
11) "v1"
12) "v1"
13) "v1"
14) "v1"
127.0.0.1:6379> lrem list1 5 v1
(integer) 5
127.0.0.1:6379> lrem list1 -3 v1
(integer) 3
127.0.0.1:6379> lrem list1 0 v1
(integer) 6
127.0.0.1:6379> lrange list1 0 -1
(empty list or set)

ltrim

使用ltrim可以截取目标链表,只保留start到stop闭区间范围里的节点,其余全部删除。

127.0.0.1:6379> lrange list1 0 -1
1) "v1"
2) "v2"
3) "v3"
4) "v4"
5) "v5"
6) "v6"
7) "v7"
127.0.0.1:6379> ltrim list1 1 3
OK
127.0.0.1:6379> lrange list1 0 -1
1) "v2"
2) "v3"
3) "v4"

修改命令

lset

使用lset修改指定下标的(从0开始计数)节点value值,如果下标index超过链表最大长度报错提示下标越界。

127.0.0.1:6379> rpush list1 v1 v2 v3
(integer) 3
127.0.0.1:6379> lset list1 2 newvalue
OK
127.0.0.1:6379> lrange list1 0 -1
1) "v1"
2) "v2"
3) "newvalue"

查询命令

llen

使用llen返回目标链表长度。

127.0.0.1:6379> llen list1
(integer) 0
127.0.0.1:6379> llen list2
(integer) 3

lrange

使用lrange返回目标链表key,从start下标到stop下标闭区间内的节点值,当start和stop分别取0和-1时,返回整个链表的节点值。

127.0.0.1:6379> lrange list1 0 -1
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> lrange list1 0 1
1) "v1"
2) "v2"

lindex

使用lindex返回目标链表key中下标为index的节点值,下标从0计数。

127.0.0.1:6379> lrange list1 0 -1
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> lindex list1 1
"v2"

其他命令

rpoplpush

使用rpoplpush可以将以源链表的尾节点加入到目标链表的头节点,如果目标链表不存在,则会创建一个。

127.0.0.1:6379> lrange list1 0 -1
1) "v1"
2) "v2"
127.0.0.1:6379> lrange list2 0 -1
1) "v3"
2) "v4"
127.0.0.1:6379> rpoplpush list1 list2
"v2"
127.0.0.1:6379> lrange list1 0 -1
1) "v1"
127.0.0.1:6379> lrange list2 0 -1
1) "v2"
2) "v3"
3) "v4"
127.0.0.1:6379> rpoplpush list1 list3
"v1"
127.0.0.1:6379> lrange list3 0 -1
1) "v1"
127.0.0.1:6379> lrange list1 0 -1
(empty list or set)