假设您在Redis中有一个LIST数据类型。你如何删除所有条目?我已经尝试过这个了:
LTRIM key 0 0
LTRIM key -1 0
这两个都留下了第一个元素。这将留下所有元素:
LTRIM key 0 -1
我没有看到完全清空列表的单独命令。
答案 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',我只想删除所有条目。
小心,噢,你们徘徊在这里。