【问题标题】:Proper way to cache data from API call with nodejs使用nodejs从API调用缓存数据的正确方法
【发布时间】:2013-03-14 11:37:06
【问题描述】:

我正在使用 node.js 编写一个 Web 服务,它为一些数据调用一个 API,但我受到 API 的限制,每个月只能调用多次,所以我希望缓存我从 API 检索到的数据,所以我可以用缓存的数据来提供它,并以定时的时间间隔从 API 重新获取数据。

这是解决这个问题的好方法吗?我应该使用什么缓存框架?我查看了 node-redis,但我认为键值存储不适合数据。

谢谢!

【问题讨论】:

  • 我知道这很旧,但只是好奇——你在 node 中使用什么库来进行 http 调用?
  • 如果您使用出色的超级代理库从节点调用 API,请考虑查看超级代理缓存。您可以将 redis 缓存直接内置到您的超级代理查询中。免责声明:我写了 superagent-cache。

标签: api node.js caching redis


【解决方案1】:

我不同意你关于 Redis 的看法。 Redis 是一个非常强大的键值对存储,可以很容易地用于你想要的东西。它旨在将东西倾倒在其中并再次取出。在您的情况下,您可以通过将查询作为键将其保存到 Redis 中来轻松缓存 API 响应(如果这是您正在调用的 REST API,您可以只使用 URL 或序列化数据作为键)并简单地缓存作为字符串化 JSON 对象(或 XML 字符串,如果你碰巧得到它)的响应。

您还可以对缓存数据设置过期时间,过期后会被清除。

然后,您可以将 API 调用包装在一个辅助函数中,该函数检查缓存,如果存在则返回该值。如果不是,它会发出 API 请求,将其添加到缓存中,然后返回。

这可能是最直接的解决方案,并且似乎很好地涵盖了您的用例。

【讨论】:

  • 非常感谢您的回复!我不熟悉redis,因此我最初的评估。你写的很有意义,我将把这个解决方案用于我的网络服务。
  • 这也将避免在实际需要之前重新获取缓存的数据,而不是按问题建议的那样每隔一段时间执行一次。
  • 这个问题的答案非常好,您是否熟悉某种教程或如何在节点中使用此设置的示例代码?
  • 我不想再问这个问题了,我想补充一点,我有 1000 个 json 条目,其中有 8 个字段,我想每 20 秒从 API 缓存一次,你认为 redis 会做得很好,特别是考虑到如何在 redis 中存储 JSON 感觉很糟糕
猜你喜欢
  • 2016-05-17
  • 2019-07-31
  • 2017-09-04
  • 2018-04-29
  • 2022-11-02
  • 2011-03-28
  • 2011-07-18
  • 2016-05-09
  • 1970-01-01
相关资源
最近更新 更多