在Redis中有关于有序集合项目到期的提议(请参阅https://groups.google.com/d/msg/redis-db/rXXMCLNkNSs/Bcbd5Ae12qQJ和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
现在,假设工人在40秒后执行,我期待
zremrangebyscore 1 0 40
可以胜任,但事实并非如此,
ZREMRANGEBYLEX 1 [0 [40
做到了。为什么会这样?这意味着地理空间项目的分数仅支持词典编纂操作?
答案 0 :(得分:3)
排序集具有元素(字符串),每个元素都有一个分数(浮点数)。 Geosets使用分数来编码坐标。
Redis不会使排序集(或Geoset)中的成员失效。如果需要,你必须自己删除它们。
在您的情况下,您需要保留两个排序集 - 一个作为您的GeoSet,一个用于管理TTL作为分数。
例如,假设您的成员被称为“foo'”,则添加它:
ZADD ttls 30 foo
ZADD elems -8.616021 41.154503 foo
要手动过期,首先找到呼叫ZRANGEBYSCORE ttls
的成员,然后从两个集合中删除它们。
提示:最好使用时间戳作为分数而不是秒。