gpt4 book ai didi

redis - 集合成员的 TTL

转载 作者:IT王子 更新时间:2023-10-29 05:54:14 25 4
gpt4 key购买 nike

是否可以在 Redis 中设置 TTL(生存时间)而不是针对特定键,而是针对集合的成员?

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

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

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

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

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

最佳答案

不,这是不可能的(和 not planned either )。 recommended方法是使用分数设置为时间戳的有序集,然后手动删除过期的键。要查询未过期的 key ,您可以使用 ZRANGEBYSCORE $now +inf,要删除过期的 key ,ZREMRANGEBYSCORE -inf $now 可以解决问题。

在我的应用程序中,我每次查询集合时都简单地发出这两个命令。我还将其与集合本身的(长)到期时间相结合,以最终清除未使用的集合。

This article更详细地介绍了它。

关于redis - 集合成员的 TTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17060672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com