В nginx я использую
proxy_cache_use_stale updating
директива (http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_use_stale), чтобы одновременный запрос к недействительному кэшированному контенту отправлял только 1 запрос восходящему потоку (не первый запрос отвечает устаревшим контентом, в то время как первый запрос обновляет контент).
это хорошо работает.
Теперь есть способ получить немедленный ответ на первый запрос устаревшим содержимым и в то же время запустить обновление?
прямо сейчас время отклика очень хорошее для первого запроса, который не делает недействительным, но первый должен подождать, пока серверная часть не ответит. Я бы предпочел обслуживать устаревший контент, пока кеш не будет обновлен.
То, что вы ищете, называется stale-while-revalidate (RFC 5861) и реализовано в nginx в виде директивы, называемой proxy_cache_background_update. Аналогичный функционал можно найти в лаке 4 и в Squid это называется Свернутая пересылка.
Эта функция была добавлена в nginx
1.11 (апрель 2016 г.) как proxy_cache_background_update
Если вы хотите гарантировать, что только один запрос может попасть на прокси-сервер за раз (например, сервер хрупок из-за высокой нагрузки, вызванной запросом), вам понадобятся все три из них:
proxy_cache_use_stale updating;
proxy_cache_background_update on;
proxy_cache_lock on;
В блоге nginx есть отличное объяснение того, зачем нужны эти трое и для чего они нужны: https://www.nginx.com/blog/nginx-caching-guide/.