【问题标题】:Redis geospatial, query by timeRedis地理空间,按时间查询
【发布时间】:2018-10-22 16:29:26
【问题描述】:

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

据我了解,对于地理位置和基于时间的查询,建议使用排序集(如果是地理位置,则为 GEOADD)。

在结构上,我不确定如何使用 Redis 解决这个问题,因为它只是一个键值存储,二级索引似乎并不简单。
我一直在网上寻找,但没有找到答案。
这甚至可能吗?

【问题讨论】:

    标签: redis geospatial


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我还不熟悉语法,但我从中理解的是,我使用相同的标识符创建了两个集合,然后相交。
    • @Imaskar 已编辑以将其添加到答案的底部。
    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 2013-09-25
    • 2018-04-06
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多