Redis:列表LREM、LLEN、LINDEX、LINSERT、LSET、LRANGE、LTRIM命令介绍

LREM

LREM key count value
可用版本: >= 1.0.0
时间复杂度: O(N), N 为列表的长度。

根据参数count的值,移除列表中与参数value相等的元素。

演示

push一些值进去。

127.0.0.1:6379> lpush list kaven jojo java kaven docker redis kaven vue kaven nginx springcloud kaven
(integer) 12
127.0.0.1:6379> lpush list mybatis kaven mybatisplus kaven rabbitmq kaven kafka k8s kaven juc jvm kaven
(integer) 24
127.0.0.1:6379> lrange list 0 -1
 1) "kaven"
 2) "jvm"
 3) "juc"
 4) "kaven"
 5) "k8s"
 6) "kafka"
 7) "kaven"
 8) "rabbitmq"
 9) "kaven"
10) "mybatisplus"
11) "kaven"
12) "mybatis"
13) "kaven"
14) "springcloud"
15) "nginx"
16) "kaven"
17) "vue"
18) "kaven"
19) "redis"
20) "docker"
21) "kaven"
22) "java"
23) "jojo"
24) "kaven"

count大于0时,从表头开始向表尾搜索,移除与value相等的元素,数量为count

127.0.0.1:6379> lrem list 4 kaven
(integer) 4
127.0.0.1:6379> lrange list 0 -1
 1) "jvm"
 2) "juc"
 3) "k8s"
 4) "kafka"
 5) "rabbitmq"
 6) "mybatisplus"
 7) "kaven"
 8) "mybatis"
 9) "kaven"
10) "springcloud"
11) "nginx"
12) "kaven"
13) "vue"
14) "kaven"
15) "redis"
16) "docker"
17) "kaven"
18) "java"
19) "jojo"
20) "kaven"

如果与value相等的元素数量小于count,就相当于移除与value相等的全部元素。

127.0.0.1:6379> lrem list 40 kaven
(integer) 6
127.0.0.1:6379> lrange list 0 -1
 1) "jvm"
 2) "juc"
 3) "k8s"
 4) "kafka"
 5) "rabbitmq"
 6) "mybatisplus"
 7) "mybatis"
 8) "springcloud"
 9) "nginx"
10) "vue"
11) "redis"
12) "docker"
13) "java"
14) "jojo"

count小于0时,从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。

127.0.0.1:6379> del list
(integer) 1
127.0.0.1:6379> lpush list kaven jojo java kaven docker redis kaven vue kaven nginx springcloud kaven
(integer) 12
127.0.0.1:6379> lpush list mybatis kaven mybatisplus kaven rabbitmq kaven kafka k8s kaven juc jvm kaven
(integer) 24
127.0.0.1:6379> lrem list -6 kaven
(integer) 6
127.0.0.1:6379> lrange list 0 -1
 1) "kaven"
 2) "jvm"
 3) "juc"
 4) "kaven"
 5) "k8s"
 6) "kafka"
 7) "kaven"
 8) "rabbitmq"
 9) "kaven"
10) "mybatisplus"
11) "mybatis"
12) "springcloud"
13) "nginx"
14) "vue"
15) "redis"
16) "docker"
17) "java"
18) "jojo"

count等于0时,移除表中所有与value相等的值。

127.0.0.1:6379> lrem list 0 kaven
(integer) 4
127.0.0.1:6379> lrange list 0 -1
 1) "jvm"
 2) "juc"
 3) "k8s"
 4) "kafka"
 5) "rabbitmq"
 6) "mybatisplus"
 7) "mybatis"
 8) "springcloud"
 9) "nginx"
10) "vue"
11) "redis"
12) "docker"
13) "java"
14) "jojo"

所以,LREM命令会返回被移除元素的数量。 因为不存在的key被视作空表,所以当key不存在时, LREM命令返回0

127.0.0.1:6379> del list
(integer) 1
127.0.0.1:6379> lrem list 0 kaven
(integer) 0

LLEN

LLEN key
可用版本: >= 1.0.0
时间复杂度: O(1)

返回列表key的长度。

演示

因为不存在的key被视作空表,所以当key不存在时, LLEN命令返回0

127.0.0.1:6379> exists list
(integer) 0
127.0.0.1:6379> llen list
(integer) 0

如果key不是列表类型,返回一个错误。

127.0.0.1:6379> set str "this is string"
OK
127.0.0.1:6379> llen str
(error) WRONGTYPE Operation against a key holding the wrong kind of value

key存在并且是列表类型,返回列表key的长度。

127.0.0.1:6379> lpush list 1 2 3 4 5 6 7
(integer) 7
127.0.0.1:6379> lpush list 4 5 6 0
(integer) 11
127.0.0.1:6379> llen list
(integer) 11

LINDEX

LINDEX key index
可用版本: >= 1.0.0
时间复杂度:O(N), N 为到达下标 index 过程中经过的元素数量。因此,对列表的头元素和尾元素执行 LINDEX 命令,复杂度为O(1)。

返回列表key中,下标为index的元素。

列表下标从0开始,并且-1表示倒数第一个元素,-2表示倒数第二个元素,以此类推。

演示

LINDEX命令返回列表中下标为index的元素。 如果index参数的值不在列表的区间范围内,返回(nil)

127.0.0.1:6379> lrange list 0 -1
 1) "0"
 2) "6"
 3) "5"
 4) "4"
 5) "7"
 6) "6"
 7) "5"
 8) "4"
 9) "3"
10) "2"
11) "1"
127.0.0.1:6379> lindex list 5
"6"
127.0.0.1:6379> lindex list 20
(nil)
127.0.0.1:6379> lindex list -1
"1"
127.0.0.1:6379> lindex list 0
"0"

显然,如果key不是列表类型,LINDEX命令会返回一个错误。

LINSERT

LINSERT key BEFORE|AFTER pivot value
可用版本: >= 2.2.0
时间复杂度: O(N), N 为寻找 pivot 过程中经过的元素数量。

将值value插入到列表key当中,位于值pivot之前或之后。

演示

pivot不存在于列表key时,LINSERT命令不执行任何操作。如果没有找到pivot ,返回-1

127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> linsert list before 7 6
(integer) -1
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

如果key不存在或为空列表,返回0

127.0.0.1:6379> exists list
(integer) 0
127.0.0.1:6379> linsert list before 1 0
(integer) 0
127.0.0.1:6379> lpush list 0
(integer) 1
127.0.0.1:6379> lpop list
"0"
127.0.0.1:6379> linsert list before 1 0
(integer) 0

如果命令执行成功,返回插入操作完成之后列表的长度。

127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "3"
3) "2"
4) "1"
5) "0"
127.0.0.1:6379> linsert list after 5 4
(integer) 6
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "0"

显然,如果key不是列表类型,LINSERT命令也会返回一个错误。

LSET

LSET key index value
可用版本: >= 1.0.0
时间复杂度:对头元素或尾元素进行 LSET 操作,复杂度为 O(1)。其他情况下,为 O(N), N 为列表的长度。

将列表key下标为index的元素的值设置为value

演示

以下四种情况,执行LSET命令会返回一个错误:

  • index参数超出列表区间范围。
  • key不存在。
  • key为空列表。
  • key存在但不是列表类型。
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
6) "0"
127.0.0.1:6379> lset list 10 9
(error) ERR index out of range
127.0.0.1:6379> del list
(integer) 1
127.0.0.1:6379> lset list 0 0
(error) ERR no such key
127.0.0.1:6379> lpush list 0
(integer) 1
127.0.0.1:6379> lpop list
"0"
127.0.0.1:6379> lset list 0 0
(error) ERR no such key
127.0.0.1:6379> set str "this is string"
OK
127.0.0.1:6379> lset str 0 0
(error) WRONGTYPE Operation against a key holding the wrong kind of value

执行LSET命令成功后返回ok

127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "3"
3) "2"
4) "1"
5) "0"
127.0.0.1:6379> lset list 0 4
OK
127.0.0.1:6379> lrange list  0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "0"
127.0.0.1:6379> lset list -1 "index -1"
OK
127.0.0.1:6379> lrange list 0 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "index -1"

LRANGE

LRANGE key start stop
可用版本: >= 1.0.0
时间复杂度: O(S+N), S 为偏移量 start , N 为指定区间内元素的数量

返回列表key中指定区间内的元素,区间以偏移量startstop指定。

并且-1表示列表的倒数第一个元素,-2表示列表的倒数第二个元素,以此类推。

演示

偏移量startstop的值超出列表区间范围,不会引起错误。

127.0.0.1:6379> lrange list 0 100
1) "4"
2) "3"
3) "2"
4) "1"
5) "index -1"
127.0.0.1:6379> lrange list -100 -1
1) "4"
2) "3"
3) "2"
4) "1"
5) "index -1"
127.0.0.1:6379> lrange list 7 -1
(empty list or set)
127.0.0.1:6379> lrange list 7 10
(empty list or set)
127.0.0.1:6379> lrange list 3 10
1) "1"
2) "index -1"
127.0.0.1:6379> lrange list 10 3
(empty list or set)

显然,如果key不是列表类型,LRANGE命令也会返回一个错误。

127.0.0.1:6379> get str
"this is string"
127.0.0.1:6379> lrange str 0 1
(error) WRONGTYPE Operation against a key holding the wrong kind of value

LTRIM

LTRIM key start stop
可用版本: >= 1.0.0
时间复杂度: O(N), N 为被移除的元素的数量

对列表key进行修剪(trim),让列表key只保留指定区间内的元素,不在指定区间内的元素都将被删除。

并且-1表示列表的倒数第一个元素,-2表示列表的倒数第二个元素,以此类推。

演示

偏移量startstop的值超出列表区间范围,不会引起错误。命令执行成功时,返回ok

127.0.0.1:6379> del list
(integer) 1
127.0.0.1:6379> lpush list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
(integer) 16
127.0.0.1:6379> lrange list 0 -1
 1) "16"
 2) "15"
 3) "14"
 4) "13"
 5) "12"
 6) "11"
 7) "10"
 8) "9"
 9) "8"
10) "7"
11) "6"
12) "5"
13) "4"
14) "3"
15) "2"
16) "1"
127.0.0.1:6379> ltrim list 6 -1
OK
127.0.0.1:6379> lrange list 0 -1
 1) "10"
 2) "9"
 3) "8"
 4) "7"
 5) "6"
 6) "5"
 7) "4"
 8) "3"
 9) "2"
10) "1"
127.0.0.1:6379> ltrim list 2 1000
OK
127.0.0.1:6379>  lrange list 0 -1
1) "8"
2) "7"
3) "6"
4) "5"
5) "4"
6) "3"
7) "2"
8) "1"
127.0.0.1:6379> ltrim list -5 -1
OK
127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> ltrim list 10 100
OK
127.0.0.1:6379> lrange list 0 -1
(empty list or set)

start的值大于end的值,会将列表中所有的值全部清空,至少我这个版本是这样的。

127.0.0.1:6379> lrange list 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> ltrim list 4 2
OK
127.0.0.1:6379> lrange list 0 -1
(empty list or set)
127.0.0.1:6379>  lpush list 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
(integer) 16
127.0.0.1:6379> ltrim list 5 1
OK
127.0.0.1:6379> lrange list 0 -1
(empty list or set)

显然,当key不是列表类型时,LTRIM命令会返回一个错误。

127.0.0.1:6379> get str
"this is string"
127.0.0.1:6379> ltrim str 0 1
(error) WRONGTYPE Operation against a key holding the wrong kind of value

Redis中列表的LREM、LLEN、LINDEX、LINSERT、LSET、LRANGE、LTRIM命令就介绍到这里。

写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ITKaven

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

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

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

打赏作者

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

抵扣说明:

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

余额充值