Redis:列表LREM、LLEN、LINDEX、LINSERT、LSET、LRANGE、LTRIM命令介绍
Redis学习(十) - 列表LREM、LLEN、LINDEX、LINSERT、LSET、LRANGE、LTRIM命令介绍LREMLREM key count value可用版本: >= 1.0.0时间复杂度: O(N), N 为列表的长度。根据参数count的值,移除列表中与参数value相等的元素。演示先push一些值进去。127.0.0.1:6379> lpush list ka
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
中指定区间内的元素,区间以偏移量start
和stop
指定。
并且-1
表示列表的倒数第一个元素,-2
表示列表的倒数第二个元素,以此类推。
演示
偏移量start
或stop
的值超出列表区间范围,不会引起错误。
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
表示列表的倒数第二个元素,以此类推。
演示
偏移量start
或stop
的值超出列表区间范围,不会引起错误。命令执行成功时,返回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命令就介绍到这里。
写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!
更多推荐
所有评论(0)