Javascript Node.js API-来自多个客户端的重复数据请求

Javascript Node.js API-来自多个客户端的重复数据请求,javascript,node.js,rest,api-design,restify,Javascript,Node.js,Rest,Api Design,Restify,我有一个使用Restify的Node.JS api,它基本上是一个聚合器,用于在Google工作表中使用其他几个api 当Google工作表最初打开时,它会向我的服务器发出几个请求,从各种API请求一组数据,然后我的服务器尽职尽责地查找并返回这些数据 我已经实现了基本的基于内存的缓存——如果对相同数据的请求传入,它将从内存中提供服务,直到达到到期时间为止(我很快就会转向Redis) 我的问题是,当第一个请求仍在被查找/解析/服务时,对相同数据的第二个请求会定期出现,这意味着我并行地请求相同(几G

我有一个使用Restify的Node.JS api,它基本上是一个聚合器,用于在Google工作表中使用其他几个api

当Google工作表最初打开时,它会向我的服务器发出几个请求,从各种API请求一组数据,然后我的服务器尽职尽责地查找并返回这些数据

我已经实现了基本的基于内存的缓存——如果对相同数据的请求传入,它将从内存中提供服务,直到达到到期时间为止(我很快就会转向Redis)

我的问题是,当第一个请求仍在被查找/解析/服务时,对相同数据的第二个请求会定期出现,这意味着我并行地请求相同(几GB)的数据

如何有效地暂停第二个请求并让它等待第一个请求的数据可用?我不介意有一个很高的超时时间,并等待第一个请求在第二个请求开始之前结束,或者某种“退出并在一分钟内重试”的逻辑是可行的

我想某种承诺或在某个地方保存回调是最好的,但我不确定有什么样的最佳实践或建议的方法


我不可能定期请求和缓存数据服务器端,因为客户端可以请求的潜在值范围相当大

把承诺藏起来。如果请求正在进行中,缓存将指示它已被请求,并且您仍然可以等待未解决的承诺,然后在数据准备就绪时响应这两个请求

无论承诺是否得到解决,其余代码都需要重构,以等待缓存中的值,并在请求启动而不是完成时向缓存中添加条目

如果缓存中的承诺已经解决,那么
wait
只会在事件循环中暂停用户函数的异步流一次,这意味着您可以免费看到挂起的请求