2013-03-25 55 views
15

我正在使用node.js来编写一个Web服务,它调用一些数据的API,但我被每个月的API调用数量限制,所以我希望缓存从API中检索到的数据,以便我可以使用缓存的数据提供它,并以一定的时间间隔从API重新获取数据。正确的方法来缓存来自API调用与nodejs的数据

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

谢谢!

+1

我知道这是旧的,但只是好奇 - 在你的http调用节点中使用了什么库? – jpodwys 2015-06-03 18:48:39

+1

如果您使用卓越的superagent库来处理来自节点的API调用,请考虑查看superagent-cache。您可以将redis缓存内置到您的superagent查询中。免责声明:我写了superagent-cache。 – jpodwys 2015-07-14 00:09:43

回答

30

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

您还可以设置缓存数据的到期时间,并且在时间到期时它将被清除。

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

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

+0

非常感谢您的回复!我不熟悉redis,因此我的初步评估。你写的是有道理的,我将为我的网络服务使用这个解决方案。 – 2013-03-25 20:53:22

+2

这也将避免重新获取缓存的数据,直到它真正需要时为止,而不是按照时间间隔进行,而不管它是否按照问题的建议使用。 – 2014-04-04 16:51:01

+0

对于这个问题,这真的是很好的答案,您是否熟悉某种教程或示例代码以了解如何在节点中使用此设置? – 2017-06-06 12:21:31