Redis基础教程-数据类型list命令之ltrim与lrem的基本用法

ltrim修剪现有列表,使其只包含指定范围的元素。start和stop都是基于0的索引,其中0是列表的第一个元素(头部),1是下一个元素,以此类推。

例如 LTRIM foobar 0 2 将修改存储在 foobar 处的 list,使其只保留 list 的前三个元素。 start和end也可以是负数,表示从列表末尾开始的偏移量,其中-1表示列表的最后一个元素,-2表示倒数第二个元素,以此类推。 超出范围的索引不会产生错误:如果start大于列表的end,或者start>end,结果将是一个空列表(导致键被移除)。如果end大于列表末尾,Redis会将其视为列表的最后一个元素。语法格式ltrim key start end。 我们新创建一个key,ltrim,并插入几个数据aa,bb,cc,dd,ee

127.0.0.1:6379> lpush ltrim aa bb cc dd ee
 (integer) 5

然后我们使用lrange命令看下ltrim中的数据

 127.0.0.1:6379> lrange ltrim 0 -1
 1) "ee"
 2) "dd"
 3) "cc"
 4) "bb"
 5) "aa"

我们执行ltrim方法,要处理list中的所有元素

127.0.0.1:6379> ltrim ltrim 0 1
 OK

我们再看下list中的数据

 127.0.0.1:6379> lrange ltrim 0 -1
 1) "ee"
 2) "dd"

我们发现aa,bb,cc这三个元素都不见了,因为aa,bb,cc的下标都是大于1的,因此都被移除了,我们试下如果执行ltrim key 0 -1是什么效果

127.0.0.1:6379> ltrim ltrim 0 -1
 OK
127.0.0.1:6379> lrange ltrim 0 -1
 1) "ee"
 2) "dd"

我们发现元素都在,没有元素被移除,因为0 -1,表示没有元素需要进行trim,保留所有的数据,我们再试下ltrim key -1这样的负数的inddex

127.0.0.1:6379> ltrim ltrim -1 -1
OK
127.0.0.1:6379> lrange ltrim 0 -1
1) "dd"

结果ee这个元素被移除了,这个时候如果我们要保留最后两位,看下结果

127.0.0.1:6379> ltrim ltrim -2 -1
 OK
 127.0.0.1:6379> lrange ltrim 0 -1
 1) "dd"

数据都被保存下来了,没有问题,我们试下start比end大的情况

127.0.0.1:6379> ltrim ltrim -1 -2
 OK
 127.0.0.1:6379> lrange ltrim 0 -1
 (empty list or set)
 127.0.0.1:6379> lpush ltrim 1 2 3 4 5
 (integer) 5
 127.0.0.1:6379> ltrim ltrim -1 -2
 OK
 127.0.0.1:6379> lrange ltrim 0 -1
 (empty list or set)

我们可以看到数据都被清空了,因为这个时候没有数据需要保存

发表评论

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