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

使Redis中的地理空间项目过期,redis,geospatial,Redis,Geospatial,在Redis中有关于排序集项过期的建议(请参阅和),我尝试了worker方法,使用ZREMRANGEBYSCORE和ZREMRANGEBYRANK命令使地理空间索引过期,但未成功(未删除任何内容) 我成功地使用了ZREMRANGEBYLEX 是否有一种方法可以处理除字符串以外的地理空间项目 更新: 例如,如果某个项目的生存时间(ttl)为30秒,我将其添加为: geoadd 1 -8.616021 41.154503 30 现在,假设worker在40秒后执行,我希望 zremrangebys

在Redis中有关于排序集项过期的建议(请参阅和),我尝试了worker方法,使用ZREMRANGEBYSCORE和ZREMRANGEBYRANK命令使地理空间索引过期,但未成功(未删除任何内容)

我成功地使用了ZREMRANGEBYLEX

是否有一种方法可以处理除字符串以外的地理空间项目

更新

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

geoadd 1 -8.616021 41.154503 30
现在,假设worker在40秒后执行,我希望

zremrangebyscore 1 0 40
他会做这项工作,但事实并非如此

ZREMRANGEBYLEX 1 [0 [40
是的。为什么会有这种行为?这意味着地理空间项目的分数只支持字典操作。

排序集有元素(字符串),每个元素都有分数(浮点)。地理集使用分数对坐标进行编码

Redis不会使排序集(或地理集)中的成员过期。如果需要,您必须自己移除它们

在您的情况下,需要保留两个排序集—一个作为地理集,另一个作为分数管理TTL

例如,假设您的成员名为“foo”,则要添加它:

ZADD ttls 30 foo
ZADD elems -8.616021 41.154503 foo
要手动过期,请首先找到调用了
ZRANGEBYSCORE ttls
的成员,然后将其从两个集合中删除


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

地理集是排序集,因此可以使用任何
ZREM*
命令删除元素。分数是坐标,使用geohash编码,因此,虽然可以通过分数和/或排名进行删除,但这没有多大意义。你想做什么?嗨,我想删除所有过期的物品。为了做到这一点,我使用成员(分数)作为生存时间(ttl)值。请看更新的问题。谢谢。什么效率更高?例如,通过每5秒触发一次清理过程来删除过时的项目(5秒是坐标的有效时间),或者通过每次调用elems(我每秒有1000次调用elems)来执行管道中的清理过程?我会测试它。。。但直觉上,我会选择周期性清洁剂,尽管保持这种清洁会有额外的复杂性