我在Redis数据库中有4个密钥。这些密钥从现在开始到期10秒。我已将密钥添加到集合中。当密钥过期时,它们实际上不在数据库中(获取返回空值)。但是,键仍然是该组的成员。该集合将继续存在,直到从集合中删除密钥为止,此时它已从数据库中有效地消失。
密钥过期时,是否可以自动从密钥集中删除密钥?
我正在考虑为每个键维护一个集合以维护它所属的集合(在键和集合之间创建一个有向图集合关系),然后注册键过期事件以在必要时删除集合成员。作为db的使用者,这是一个很大的开销,而不是作为某种背景清理线程。而且,这样的方法将是“尽力而为”清理集合,因为订阅到期事件的客户代码可能会崩溃,无法获得通知,积压等。
我可能已经能够通过将密钥集建模为散列集中的字段来避免任何欺骗,但我希望在实践中每个密钥具有不同的到期TTL。如果这是可能的,那么如何呢?
例如,这里是我的一组“foo”键。
mine:0>set foo1 barA
OK
mine:0>set foo2 barB
OK
mine:0>set foo3 barC
OK
mine:0>set foo4 barD
OK他们可以添加到一个集合。
mine:0>sadd foo foo1 foo2 foo3 foo4
4
mine:0>smembers foo
1) foo1
2) foo3
3) foo4
4) foo2钥匙可以过期...
mine:0>expire foo1 10
1
mine:0>expire foo2 10
1
mine:0>expire foo3 10
1
mine:0>expire foo4 10
1
mine:0>get foo1
NULL
mine:0>get foo2
NULL
mine:0>get foo3
NULL
mine:0>get foo4
NULL
mine:0>get foo5
NULL此时键不存在,但该键确实存在,并且它引用键。
mine:0>smembers foo
1) foo1
2) foo3
3) foo4
4) foo2显式删除键将从集中删除它们,然后在删除所有集合后将其设置为不存在。
mine:0>srem foo foo1
1
mine:0>srem foo foo2
1
mine:0>srem foo foo3
1
mine:0>srem foo foo4
1
mine:0>smembers foo
[nothing returned]