在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集中删除相应成员的有效方法。
id:id_1
tag:tag_1
我出现的一种方法是使用包含脚本的cron作业,该脚本将定期从集合中删除过期的密钥- 通过将所有标签名称添加到另一个集中,然后遍历所有标签,然后遍历与每个标签对应的所有id并检查是否存在相应的密钥-如果不存在,则调用SREM。
SREM
我认为这不是一种有效的方法,我可能希望保持标签尽可能整洁,因为集合的大小可能会影响多个标签(SINTER)的搜索性能。还有更“内部”的方式吗?
SINTER
无法直接使列表,集合或zset中的项目失效。
您需要实现一种机制,以便在主项目到期时得到通知,以便可以相应地维护相应的集合。
请参阅此问题的答案,我认为它适用于您的用例(按ID替换会话,按标签替换用户):