Py学习  »  Redis

redis地理空间,按时间查询

Trace • 4 年前 • 598 次点击  

我目前正在为我的应用程序开发缓存软件,并考虑使用Redis(地理空间)。
我的缓存应该允许地理位置(半径内的项目)和时间(区域内发布的项目,例如最后一个小时或一天)查询数据。我可能会在一周左右的时间后使缓存数据过期。

据我所知,对于地理位置和基于时间的查询,建议使用排序集(地理位置的情况下使用geoadd)。

从结构上讲,我不确定如何用redis来解决这个问题,因为它只是一个键值存储,而二级索引看起来并不简单。
我一直在上网,但没有找到答案。
这是可能的吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38247
 
598 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Itamar Haber
Reply   •   1 楼
Itamar Haber    5 年前

要使用Redis实现这一点,您确实需要两个排序集——一个用于存储地理数据,另一个用于存储时间戳。

这个例子展示了一种方法:

127.0.0.1:6379> GEOADD locations 0 0 id:1 1 1 id:2 0.1 0.0 id:3
(integer) 3
127.0.0.1:6379> ZADD timestamps 1000 id:1 100 id:2 800 id:3
(integer) 3
127.0.0.1:6379> GEORADIUS locations 0.2 0.0 100 km STORE tmp
(integer) 2
127.0.0.1:6379> ZINTERSTORE tmp 2 tmp timestamps WEIGHTS 0 1 AGGREGATE SUM
(integer) 2
127.0.0.1:6379> ZRANGEBYSCORE tmp 900 1100
1) "id:1"

在这种情况下,应该通过扫描“时间戳”排序集中的旧条目并从所有相关数据结构中删除它们,定期完成过期。