如何在使用Redis geoadd时设置过期时间

8

我正在使用Redis的新地理空间功能。我知道在幕后它使用了ZSET。

我是通过以下方式添加新条目的:

GEOADD" "report-geo-set" "4.78335244" "32.07223969" "jossef"

我应该如何为特定记录(在我的情况下是“jossef”)添加到期时间?

如果API没有提供此功能,是否有任何解决方法?

谢谢, 雷。

1个回答

10

很遗憾,Redis只能过期整个键,而不能过期其各自数据结构中的值。Geo Hashes是在Sorted Sets之上实现的,不支持单个成员的过期。

您可以维护一个额外的Sorted Set,并为其中的每个成员存储过期时间戳作为分数。然后,定期地根据ZRANGEBYSCORE从中获取需要过期的成员,并从您的Geo Hash "手动" ZREM相应的成员。


知道了。你如何通过关键字从地理空间中删除记录? - rayman
在我的例子中,您将如何删除包含“jossef”的记录? - rayman
ZREM report-geo-set jossef 会为您执行此操作。 - Itamar Haber
我会在成员名称中以json格式添加时间戳,例如"{'name':'jossef', 'timestamp':12121243424}",然后我可以解析json并删除任何我想要的内容。你觉得呢? - Aysennoussi
1
这将使删除至少为O(N),而且您将无法在没有整个JSON的先前知识的情况下搜索成员位置。 - Itamar Haber
我不明白为什么它会是O(n),你能详细解释一下吗?当过期时,我们不只是删除我们刚刚尝试获取的值吗(所以它应该是O(1))?(我今天刚开始使用Redis,所以我还不太了解,ZREM是否因添加的时间戳而受到影响?) - cglacet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接