redis命令集查询以到期为条件

时间:2013-11-14 18:07:15

标签: redis

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

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

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

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

2 个答案:

答案 0 :(得分:2)

这是另一种方法:

从Redis 2.8开始,您可以订阅密钥空间或密钥事件通知,以便Redis客户端可以在到期时采取某些操作。见http://redis.io/topics/notifications

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

提示:如果要横向缩放,请确保没有多个客户端观察密钥空间通知并尝试执行相同的计算。如果您有Redis客户端的多个实例,则可能需要手动执行操作,如proteneer建议的那样。

答案 1 :(得分:1)

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

相关问题