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)