0

I have an ordered set with key Z, and values:

1 "a"
4 "b"
3 "c"

In addition, I've keys a,b,c that are set to expire after varying time.

I want to find the highest ranking value in Z such that the value as a key has already expired. Is there a clean way to do this?

4

2 回答 2

2

这是另一种方法:

从 Redis 2.8 开始,您可以订阅 key-space 或 key-event 通知,以便您的 Redis 客户端可以在到期时采取一些措施。见http://redis.io/topics/notifications

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

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

于 2014-03-03T22:35:11.763 回答
1

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

于 2013-11-15T00:58:46.513 回答