小编典典

设定成员的TTL

redis

在Redis中是否可以不为特定密钥设置TTL(生存时间),而是为一组成员设置TTL?

我正在使用Redis文档提出的标签结构-数据是简单的键/值对,并且标签是包含对应于每个标签的键的集合,例如

> SETEX id:id_1 100 'Lorem ipsum'
OK
> SADD tag:tag_1 id:id_1
(integer) 1

密钥id:id_1将按预期到期,但我看不到从tag:tag_1集中删除相应成员的有效方法。

我出现的一种方法是使用包含脚本的cron作业,该脚本将定期从集合中删除过期的密钥-
通过将所有标签名称添加到另一个集中,然后遍历所有标签,然后遍历与每个标签对应的所有id并检查是否存在相应的密钥-如果不存在,则调用SREM

我认为这不是一种有效的方法,我可能希望保持标签尽可能整洁,因为集合的大小可能会影响多个标签(SINTER)的搜索性能。还有更“内部”的方式吗?


阅读 418

收藏
2020-06-20

共1个答案

小编典典

无法直接使列表,集合或zset中的项目失效。

您需要实现一种机制,以便在主项目到期时得到通知,以便可以相应地维护相应的集合。

请参阅此问题的答案,我认为它适用于您的用例(按ID替换会话,按标签替换用户):

2020-06-20