删除Redis列表中的所有条目

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

LTRIM key 0 0 LTRIM key -1 0 

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

 LTRIM key 0 -1 

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

删除密钥,这将清除所有项目。 根本没有这个清单,就好像没有任何物品一样。 当您尝试访问不存在的密钥时,Redis不会抛出任何exception。

 DEL key 

这里有一些控制台日志。

 redis>键*
 (空列表或设置)
 redis> LPUSH名字约翰
 (整数)1
 redis> LPUSH的名字玛丽
 (整数)2
 redis> LPUSH命名Alice
 (整数)3
 redis> LLEN名称
 (整数)3
 redis> LRANGE名称0 2
 1)“爱丽丝”
 2)“玛丽”
 3)“约翰”
 redis> DEL名字
 (整数)1
 redis> LLEN名称
 (整数)0
 redis> LRANGE名称0 2
 (空列表或设置)

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

 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 

我正在接听我的电话,因此无法真正格式化答案。

这可能是一个迟到的反应,但坚持在这里,以防万一有人仍然需要这种function。

简短的回答

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

长答案

ltrim的工作方式是,它需要两个索引并返回包含索引的元素。

Ltrim列表startIndex endIndex

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

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

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

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

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

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

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

 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 本身 。 不一样的东西。 一点也不。 我有一个小应用程序,其中列表键是由几个数据计算出来的散列(好吧,不是全部?),那些列表有时被清除,但空列表和不存在列表的语义是非常不同的。 所以,不,我不想DEL'myhashes',我只想删除所有条目。

当心,你们在这里游荡。