代码之家  ›  专栏  ›  技术社区  ›  Trace

redis地理空间,按时间查询

  •  1
  • Trace  · 技术社区  · 6 年前

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

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

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   Itamar Haber    6 年前

    要使用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"
    

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