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

Redis:列表LREM、LLEN、LINDEX、LINSERT、LSET、LRANGE、LTRIM命令介绍Redis 学习 十 列表 LREM LLEN LINDEX LINSERT LSET LRANGE LTRIM 命令介绍 LREMLREMkeyc 可用版本 1 0 0 时间复杂度

大家好,欢迎来到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中指定区间内的元素,区间以偏移量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命令就介绍到这里。

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156589.html

(0)
上一篇 2025-02-11 16:00
下一篇 2025-02-11 16:05

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信