我有一个使用Restify的Node.JS api,它基本上是Google表格中使用的其他几个API的聚合器。
最初打开Google工作表时,它会向我的服务器发出多个请求,以请求来自各种API的一堆数据,然后我的服务器会认真地查找并返回。
我已经实现了基本的基于内存的缓存-如果对相同数据的请求传入,它将从内存中为它提供服务,直到达到到期时间为止(我愿意不久就转向Redis)。
我的问题是,在仍在查找/解析/服务第一个请求的同时,经常会出现第二个对相同数据的请求,这意味着我要并行请求相同(几千兆字节)的数据。
如何有效地暂停第二个请求,让它等待直到第一个请求的数据可用?我不介意设置高超时时间并在第二个请求开始之前等待第一个请求结束,或者可以执行某种“退后一分钟再试一次”的逻辑。
我想象某种方式的promise或将回调保存在某处将是最好的选择,但是我不确定有什么样的最佳实践或建议的方法。
对于我来说,不可能定期请求并缓存服务器端的数据,因为客户端可以请求的值的潜在范围非常大。
保留承诺。如果正在处理请求,则高速缓存将指示它已被请求,您仍然可以await
处理未解决的承诺,然后在数据准备就绪时对两个请求进行响应。
await
无论是否解决了承诺,都需要将其余代码重构为缓存中的值,并在启动请求而不是完成请求时将条目添加到缓存中。
如果已经解决了缓存中的承诺,则await
只会在事件循环中按一个勾号停止用户功能的异步流,这意味着您将获得基本上免费查看未决请求的优势。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句