Redis中的"nil"、"empty list"或"set"问题

10

我目前正在使用"set"数据结构处理redis。

我想知道是否可以自动清理空的"set"?

否则,请找到一个定期清理空的"set"的cron/进程。


更新:

更通用的问题,"(nil)"和"(empty list or set)"之间存在差异(内存使用)。

例子:

sadd x 1
srem x
smembers x
(empty list or set)

或者

sadd x 1
del x
smembers x
(nil)
1个回答

11

这已经是自动的了。当一个集合为空时,它将从命名空间中删除。

> flushall
OK
> sadd x 1 2 3
(integer) 3
> keys *
1) "x"
> srem x 1 2 3
(integer) 3
> keys *
(empty list or set)

您不需要采取任何特定行动即可受益于此行为。

回答您的第二个问题,(nil) 或 (空列表或集合) 只是客户端程序的一种解释。 在 Redis 服务器中,两种情况下条目已被物理删除,并释放了相关的内存。


但是在内存中,"(空列表或集合)"和"(nil)"是一样的吗?因为如果你运行sadd x 1,然后del x和smembers x:提示(nil)。 - Kakawait
是的,它们是一样的。顺便说一下,使用redis-cli和Redis 2.6时,sadd x 1、del x和smembers x也会返回“(空列表或集合)”。 - Didier Spezia
我确认Didier在Redis 2.2.12上所说的内容,以防你使用Ubuntu 12.04并且没有使用2.6版本。一旦你srem了最后一个项目并将其清空,它将从命名空间中删除。 - Maziyar
那么,似乎为了使列表过期,列表必须首先具有元素。也就是说,不能创建一个空列表,设置到期时间,然后稍后再添加元素。 - einnocent
建议:最好使用flushdb作为第一个命令,flushall会从每个数据库中清除所有内容。 - PirateApp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接