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)
我们可以看到数据都被清空了,因为这个时候没有数据需要保存
页码: 1 2