删除Redis列表中的所有条目

时间:2012-03-22 18:17:50

标签: redis

假设您在Redis中有一个LIST数据类型。你如何删除所有条目?我已经尝试过这个了:

LTRIM key 0 0
LTRIM key -1 0

这两个都留下了第一个元素。这将留下所有元素:

LTRIM key 0 -1

我没有看到完全清空列表的单独命令。

6 个答案:

答案 0 :(得分:117)

删除密钥,这将清除所有项目。根本没有列表类似于没有任何项目。当您尝试访问不存在的密钥时,Redis不会抛出任何异常。

DEL key

这是一些控制台日志。

redis> KEYS *
(empty list or set)
redis> LPUSH names John
(integer) 1
redis> LPUSH names Mary
(integer) 2
redis> LPUSH names Alice
(integer) 3
redis> LLEN names
(integer) 3
redis> LRANGE names 0 2
1) "Alice"
2) "Mary"
3) "John"
redis> DEL names
(integer) 1
redis> LLEN names
(integer) 0
redis> LRANGE names 0 2
(empty list or set)

答案 1 :(得分:14)

只有当列表具有多个值 时才能删除列表 中的所有值

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"

如果列表只有一个值,则必须使用

DEL key 

答案 2 :(得分:3)

只需使用LTRIM。 ... Aaa和魔术在这里是使用start 大于 end

LTRIM key 99 0

然后...轰!这里有整个元素列表。只是* * *就在眼前!!没有残留物,绝对没有问题。

注意:这将导致密钥被“删除”(如已删除的 ),如here

所述。
  

...如果start大于列表的末尾或start> end,则结果将为空列表(这会导致键被删除)。

答案 3 :(得分:0)

我在手机上接听电话,所以实际上不能很好地格式化答案。

这可能是一个迟到的回应,但我坚持这里以防万一有人仍然需要这个功能。

简短回答

ltrim mylist 0 - (n + 1) 其中mylist是关键,n是mylist的长度。

长答案

ltrim的工作方式是,它需要两个索引并返回介于它们之间的元素,包括索引。

Ltrim list startIndex endIndex

示例假设我们有一个带有包含10个条目的密钥mylist的redis列表:

ltrim mylist 0 5  将列表修剪为从索引0到索引5的元素。并丢弃那些超出该范围的元素。

幸运的是,redis list操作支持负索引,这在某些情况下证明非常有用。通常,当您不知道列表的长度时。

-1表示最后一个元素, - 2表示倒数第二个元素等。( - n)是第一个元素。

超出范围的索引无害。如果结束索引大于列表的长度,则redis将其视为等于最后一个索引。

这就是ltrim mylist 0, - (n + 1)清除列表的原因。这样做是因为(-n)等价于索引0.在它中添加1不会在该范围内留下任何元素,因为它将在第一个元素之前。

答案 4 :(得分:0)

我尝试了这个,对我有用。只需更改列表名称的 myList 并执行 redis-cli KEYS "myList:*" | xargs redis-cli DEL

答案 5 :(得分:-1)

接受的答案是错误的。假设我有

redis 127.0.0.1:6379> KEYS * 
1) "newKey" 
2) "firstHash" 
3) "secondList" 
4) "test4" 
5) "firstList" 
6) "mylist" 

使用ahmed的例子,这实际上是正确的。 现在,如果我这样做:

DEL 'test4'

我最终得到:

1) "newKey" 
2) "firstHash" 
3) "secondList" 
4) "firstList" 
5) "mylist"` 

所以,我没有删除'test4'列表中的所有条目,我删除 test4 本身。不一样的。一点也不。我有一个小应用程序,其中列表键是从几个数据计算的哈希值(好吧,不是它们都是?),这些列表有时被清除,但空列表和不存在的列表的语义是非常不同的。 所以,不,我不想删除'myhashes',我只想删除所有条目。

小心,噢,你们徘徊在这里。