大家好,欢迎来到IT知识分享网。
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命令就介绍到这里。
写博客是博主记录自己的学习过程,如果有错误,请指正,谢谢!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156589.html