使 Redis 中的地理空间项目过期

Expire geospatial items in Redis

有关于 Redis 中排序集项目过期的建议(请参阅 https://groups.google.com/d/msg/redis-db/rXXMCLNkNSs/Bcbd5Ae12qQJ and https://quickleft.com/blog/how-to-create-and-expire-list-items-in-redis/),我尝试使用 ZREMRANGEBYSCORE 和 ZREMRANGEBYRANK 命令使地理空间索引过期的工作方法未成功(未删除任何内容)。

我使用 ZREMRANGEBYLEX 成功了。

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

更新:

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

geoadd 1 -8.616021 41.154503 30

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

zremrangebyscore 1 0 40

会做这份工作,但事实并非如此,

ZREMRANGEBYLEX 1 [0 [40

做到了。为什么会出现这种行为?也就是说地理空间项的分数只支持字典序运算?

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

Redis 不会使 Sorted Set(或 Geoset)中的成员过期。如果需要,您必须自己删除它们。

在您的情况下,您需要保留两个 Sorted Sets - 一个作为您的 GeoSet,另一个用于将 TTL 作为分数进行管理。

例如,假设您的会员名为 'foo',要添加它:

ZADD ttls 30 foo
ZADD elems -8.616021 41.154503 foo

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

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