删除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',我只想删除所有条目。
当心,你们在这里游荡。