2

我有一个 nginx 服务器,它充当 3rd 方 API 的代理,对 API 的请求有时会有点慢,当缓存中的项目有时,依赖较慢 API 调用的页面可能需要很长时间才能加载已到期。

反正有没有类似以下的事情发生:

  • 请求进入代理,缓存中没有任何内容,因此它将请求发送到 API 并缓存它。
  • 后续请求导致代理立即返回缓存结果
  • 缓存过期
  • 下一个请求导致代理提供陈旧的缓存结果,但随后 nginx 不知何故从 API 获取新内容并更新其缓存。
  • 当缓存更新后,用户开始看到更新的内容。

关键是当 nginx 检索新内容时,它会在提供过时的内容后这样做,因此发出请求的用户不必等待它完成。

那可能吗?

4

1 回答 1

2

我认为最接近的可能行为将是下一个:

  1. 如果缓存项停止,则第一个请求将等待来自上游(API)服务器的响应。
  2. 同时,对同一缓存项的其他请求将收到停滞的结果。

可以通过启用此行为proxy_cache_use_stale updating

请参阅proxy_cache_use_stale文档了解更多信息。您也可能对proxy_cache_lock感兴趣

资料来源:NGINX 缓存网络研讨会和笔记

实际上,NGINX 支持问题中提到的行为。抱歉回答不正确。请参阅:https ://stackoverflow.com/a/40134179/1079966

于 2017-10-10T13:05:45.553 回答