Redis 链表list常用命令总结

Redis中文官网命令大全

list命令汇总

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

命令语法语义
lpushlpush key value [value …]将value值封装为节点后(后简称节点)依序加入到链表头/最左侧
rpushrpush key value [value …]将节点依序加入到链表尾/最右侧
lpushxlpushx key value如果存在链表key,则将节点加入到链表头,如果不存在则什么也不做
rpushxrpushx key value如果存在链表key,则将节点加入到链表尾,如果不存在则什么也不做
linsertlinsert key BEFORE|AFTER pivot value将节点加入到值为pivot的节点之前|之后,如果不存在值为pivot的节点则什么也不做
lpoplpop key删除左侧的第一个节点/头节点,并将其返回
rpoprpop key删除右侧的第一个节点/尾节点,并将其返回
lremlrem key count value删除链表key中count个值为value的节点,若count为0,则全部删除,若count为负数则取绝对值
ltrimltrim key start stop只保留链表key中从start下标到stop下标区间的节点,其余节点删除,包括下标start和stop
llenllen key返回目标链表长度
lrangelrange key start stop返回链表key从start下标到stop下标区间的节点值,包括下标start和stop
lindexlindex key index返回链表key中下标为index的节点值
lsetlset key index value设置链表key下标为index的节点值为value
rpoplpushrpoplpush 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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

7rulyL1ar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值