假设您在Redis中具有LIST数据类型。如何删除其所有条目?我已经尝试过了:
LTRIM key 0 0
LTRIM key -1 0
两者都离开了第一个要素。这将保留所有元素:
LTRIM key 0 -1
我没有看到单独的命令来完全清空列表。
假设您在Redis中具有LIST数据类型。如何删除其所有条目?我已经尝试过了:
LTRIM key 0 0
LTRIM key -1 0
两者都离开了第一个要素。这将保留所有元素:
LTRIM key 0 -1
我没有看到单独的命令来完全清空列表。
mylist
会使您的问题更清楚。例如,redis.io/commands/ltrim写道:LTRIM mylist 1 -1
。您引用的页面是命令参考,不应被视为提供良好示例的“惯例”。
Answers:
删除密钥,这将清除所有项目。完全没有列表类似于其中没有任何项目。当您尝试访问不存在的密钥时,Redis不会引发任何异常。
DEL key
这是一些控制台日志。
redis>按键* (空列表或集合) redis> LPUSH命名John (整数)1 redis> LPUSH为玛丽命名 (整数)2 redis> LPUSH命名爱丽丝 (整数)3 redis> LLEN名称 (整数)3 redis> LRANGE名称0 2 1)“爱丽丝” 2)“玛丽” 3)“约翰” redis> DEL名称 (整数)1 redis> LLEN名称 (整数)0 redis> LRANGE名称0 2 (空列表或集合)
may create extra overhead
时间复杂度:O(N)其中N是将被删除的键的数量。当要删除的键包含字符串以外的值时,该键的单个复杂度为O(M),其中M是列表,集合,排序集合或哈希中元素的数量。删除包含字符串值的单个键为O(1)。该文档
您可以删除所有值列表 只有在名单有多于一个值
LTRIM key -1 0
例:
redis 127.0.0.1:6379> RPUSH mylist four 1 3 1
(integer) 4
redis 127.0.0.1:6379> KEYS *
1) "newKey"
2) "firstHash"
3) "secondList"
4) "test4"
5) "firstList"
6) "mylist"
redis 127.0.0.1:6379> LTRIM mylist -1 0
OK
redis 127.0.0.1:6379> LRANGE mylist 0 -1
(empty list or set)
redis 127.0.0.1:6379> KEYS *
1) "newKey"
2) "firstHash"
3) "secondList"
4) "test4"
5) "firstList"
但是,如果List仅具有一个值,则必须使用
DEL key
DEL key
@Anurag的答案?似乎它们具有相同的效果。
LTRIM
重复使用的算法,因此受到鼓舞,并且很高兴知道第二个参数低于第一个参数时会发生什么。我可以看到利用这种行为如何使某些代码更优雅。
公认的答案是错误的。假设我有
redis 127.0.0.1:6379> KEYS *
1) "newKey"
2) "firstHash"
3) "secondList"
4) "test4"
5) "firstList"
6) "mylist"
用艾哈迈德的例子,这实际上是正确的。现在,如果我这样做:
DEL 'test4'
我最终得到:
1) "newKey"
2) "firstHash"
3) "secondList"
4) "firstList"
5) "mylist"`
所以,我没有从“TEST4”列表中删除所有的条目,我删除TEST4本身。不一样的东西。一点也不。我有一个小应用程序,其中列表键是根据几个数据计算得出的哈希值(嗯,不是全部吗?),有时会清除这些列表,但是空列表和不存在的列表的语义有很大不同。所以,不,我不想删除'myhashes',我只想删除所有条目。
当心,哦,谁在这里徘徊。
The LPUSH command inserts a new element on the head, while RPUSH inserts a new element on the tail. A new list is created when one of this operations is performed against an empty key. Similarly the key is removed from the key space if a list operation will empty the list. These are very handy semantics since all the list commands will behave exactly like they were called with an empty list if called with a non-existing key as argument.
这可能是一个较晚的响应,但如果有人仍然需要该功能,则将其粘贴在此处。
简短答案
ltrim mylist 0-(n + 1)其中,mylist是键,n是mylist的长度。
长答案
ltrim的工作方式是,它需要两个索引并返回包含在两个索引之间的元素。
Ltrim列表startIndex endIndex
假设我们有一个redis列表,其键mylist包含10个条目:
ltrim mylist 0 5将把列表修剪为从索引0到索引5的元素,并丢弃那些超出该范围的元素。
幸运的是,redis列表操作支持负索引,这在某些情况下非常有用。通常,当您不知道列表的长度时。
-1表示最后一个元素,-2是倒数第二个元素,依此类推。(-n)是第一个元素。
超出范围的索引无害。如果结束索引大于列表的长度,则redis将其视为等同于最后一个索引。
这就是为什么ltrim mylist 0,-(n +1)清除列表的原因。这样做是因为(-n)等于索引0。对其添加1不会在该范围内保留任何元素,因为该范围将在第一个元素之前。
ltrim mylist 0 -99999
。