在Redis中存储和检索坐标数据

我使用Redis作为caching系统来存储数据,以避免在API上不必要的消耗。 我在想的是在从API获得结果之后,将坐标(例如作为关键字)和数据存储在Redis上,然后再次使用外部API,然后在Redis中传递新的坐标检查与保存的坐标(以米为单位)相匹配,如果匹配,则将存储的数据带给我。

我已经search了至less1小时,找不到符合我需要的相关结果。 例如, GEOADD无法帮助我,因为它不会由Redis自动过期。

唯一的解决scheme是将坐标存储为带有json值的键(例如: -51.356156,-50.356945 ),如果与其他坐标匹配,则使用函数式编程检查所有键(坐标)。 但它不雅,也performance不佳。

有任何想法吗?

我在NodeJS(Express)中使用Redis。

如果我理解正确,你想能够:

  1. caching给定的坐标元组的API响应
  2. 能够对caching的响应执行有效的半径search
  3. 使用Redis的过期来使旧的caching条目无效

为了满足#1,你已经概述了正确的方法 – 将每个API调用存储在自己的密钥下。 你可以用你的坐标命名键,或者使用他们的geohash值(计算它可以在客户端完成,或者在Redis中使用临时元素)。 另外不要忘记设置一个关键TTL和全球最大内存驱逐策略驱逐实际工作。

第二个要求要求使用地理组合。 将坐标和键名存储在其中。 通过调用GEORADIUS执行查询,然后根据回复获取相关密钥。

在从#2的查询中获取密钥的同时,您可能会发现其中一些已经从密钥空间中被驱逐出来,但不在地理组合中。 为每一个调用ZREM来保持索引(地理集合)和密钥空间之间的同步。 另外,你也可以运行一个周期性的后台任务, ZSCAN任务是ZSCAN的地理设置和做家务。 这应该照顾#3。