在 Redis 中是否可以不为特定键设置 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
)。有没有更“内部”的方式?