【问题标题】:redis ordered set queries conditioned on expiration以过期为条件的redis有序集查询
【发布时间】:2014-03-05 01:24:03
【问题描述】:

我有一个带有键 Z 和值的有序集:

1个“a”
4 "b"
3“c”

此外,我还有设置为在不同时间后过期的键 a、b、c。

我想在 Z 中找到排名最高的值,使得作为键的值已经过期。有没有干净的方法来做到这一点?

【问题讨论】:

    标签: redis


    【解决方案1】:

    这是另一种方法:

    从 Redis 2.8 开始,您可以订阅键空间或键事件通知,以便您的 Redis 客户端可以在发生过期时采取一些措施。见http://redis.io/topics/notifications

    当您收到到期通知时,将条目添加到另一个有序集合中,例如 Zexpires。然后,当您需要执行您的操作时,您可以使用 ZINTERSTORE 查找交集,并在交集的结果上使用 ZRANK 获得最高排名值。

    提示:如果您是水平扩展,请确保您没有多个客户端观察键空间通知并尝试执行相同的计算。如果您有多个 Redis 客户端实例,您可能希望按照 proteneer 的建议手动执行操作。

    【讨论】:

      【解决方案2】:

      Redis 没有过期挂钩。但是,您可以做的是有一个有序集合,其中分数是自纪元以来的时间(以秒为单位),因此它们按时间排序,最后一个将是最旧的。然后,您可以通过减去应用程序中的时间(现在减去列表中项目的分数)或使用 Lua 存储过程来检查它们是否已过期。

      【讨论】:

        猜你喜欢
        • 2021-11-29
        • 2019-01-08
        • 2018-06-11
        • 2022-11-08
        • 1970-01-01
        • 2021-03-06
        • 1970-01-01
        • 2021-07-18
        • 1970-01-01
        相关资源
        最近更新 更多