在Redis中过期地理空间项目

时间:2017-05-22 10:58:02

标签: redis geospatial

在Redis中有关于有序集合项目到期的提议(请参阅https://groups.google.com/d/msg/redis-db/rXXMCLNkNSs/Bcbd5Ae12qQJhttps://quickleft.com/blog/how-to-create-and-expire-list-items-in-redis/),我尝试使用工作方法使ZREMRANGEBYSCORE和ZREMRANGEBYRANK命令的地理空间索引失效(没有删除)。

我成功使用了ZREMRANGEBYLEX。

有没有办法处理除字符串以外的地理空间项目得分?

更新

例如,如果项目的生存时间(ttl)是30秒,我将其添加为:

geoadd 1 -8.616021 41.154503 30

现在,假设工人在40秒后执行,我期待

zremrangebyscore 1 0 40

可以胜任,但事实并非如此,

ZREMRANGEBYLEX 1 [0 [40

做到了。为什么会这样?这意味着地理空间项目的分数仅支持词典编纂操作?

1 个答案:

答案 0 :(得分:3)

排序集具有元素(字符串),每个元素都有一个分数(浮点数)。 Geosets使用分数来编码坐标。

Redis不会使排序集(或Geoset)中的成员失效。如果需要,你必须自己删除它们。

在您的情况下,您需要保留两个排序集 - 一个作为您的GeoSet,一个用于管理TTL作为分数。

例如,假设您的成员被称为“foo'”,则添加它:

ZADD ttls 30 foo
ZADD elems -8.616021 41.154503 foo

要手动过期,首先找到呼叫ZRANGEBYSCORE ttls的成员,然后从两个集合中删除它们。

提示:最好使用时间戳作为分数而不是秒。