gpt4 book ai didi

node.js - 在 Redis 中存储和检索坐标数据

转载 作者:IT王子 更新时间:2023-10-29 06:13:14 25 4
gpt4 key购买 nike

我使用 Redis 作为缓存系统来存储数据,以避免不必要地消耗 API。我在想的是在从 API 获得结果后,将坐标(例如,作为键)和数据存储在 Redis 上,并在稍后的搜索中再次使用外部 api,如果在 Redis 中传递新的坐标检查与保存的坐标(以米或任何形式)匹配,如果匹配,请将存储的数据带给我。

我已经搜索了至少 1 小时,但找不到任何符合我需要的相关结果。例如,GEOADD无法帮助我,因为 Redis 不会自动过期。

唯一的解决方案是将坐标存储为具有 json 值的键(例如:-51.356156,-50.356945),并使用函数式编程检查所有键(坐标)是否与另一个坐标。但是看起来不优雅,性能也不好。

有什么想法吗?

我在 NodeJS (Express) 中使用 Redis。

最佳答案

如果我没理解错的话,你希望能够:

  1. 缓存 API 对给定坐标元组的响应
  2. 能够对缓存的响应执行有效的半径搜索
  3. 使用 Redis 的过期时间使旧的缓存条目失效

为了满足 #1,您已经概述了正确的方法 - 将每个 API 调用存储在其自己的 key 下。您可以通过坐标命名键,或使用它们的 geohash 值(计算它可以在客户端或使用 Redis 中的临时元素完成)。也不要忘记在该键上设置 TTL 和全局最大内存逐出策略以使逐出实际起作用。

第二个要求要求使用 Geo Set。在其中存储坐标和键名。通过调用 GEORADIUS 执行您的查询然后根据回复获取相关key。

从#2 的查询中获取键时,您可能会发现其中一些已从键空间中被逐出,但不在 Geo Set 中。调用ZREM对于其中的每一个,在您的索引(地理集)和键空间之间保持同步。此外,您还可以运行一个周期性的后台任务 ZSCAN是 Geo Set 并做家务。这应该处理 #3。

关于node.js - 在 Redis 中存储和检索坐标数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47522549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com