Скажем, у меня есть кешированный ответ (веб-кеш, полный html), который я хочу обновлять каждые 30 минут. Дело в том, что по прошествии этих 30 минут я хочу обслужить первый следующий запрос «старой» кэшированной версии, а затем в фоновом режиме очистить кеш для этого запроса и сделать это повторно, чтобы следующие запросы получили обновленную версию.
Например: у меня есть кешированная версия /whatever.php, которая была кэширована в 15:00. Затем до 15:30 каждый запрос к /whatever.php получит этот кешированный html, и я хочу, чтобы первый запрос после 15:30 (даже если он в 18:00 или на следующий день) получил ту же кешированную версию и затем запускает поток в фоновом режиме или что-то еще, чтобы обновить кеш.
Я предполагаю, что этого можно достичь, имея кеш с бесконечным временем жизни и используя заголовок, который заставляет кеш обновляться, поэтому кеш всегда обслуживает кешированную версию, если запрос не заставляет его обновить, но тогда моя проблема: как позаботиться ограничений по времени в этом сценарии и как сделать фоновый запрос (curl или что-то еще) с сервера кеш-менеджера?
Есть ли какая-нибудь технология кеширования, которая позволила бы мне сделать что-то подобное?
После вашего комментария я думаю, что перефразирую ваш вопрос:
Как я могу гарантировать, что мой кеш всегда будет содержать все объекты и не будет промахов кеша?
Это обычно называется «нагреванием кэша».
Вместо того, чтобы полагаться на (первых) посетителей сайта и популярность вашего сайта, чтобы поддерживать заполнение кеша, вы сами (регулярно и неоднократно) запрашиваете каждую страницу и объект, сканируя свой собственный сайт.
Это предполагает, что в вашем кэше достаточно памяти для кэширования всех объектов, и что сканирование вашего сайта завершается до того, как первые объекты уже начнут истекать из кеша.
Одна из стратегий, позволяющих сделать это более осуществимым на более крупном сайте, - это установить более длительное время истечения срока действия кеша с внутреннего сервера. Это предотвратит слишком быстрое истечение срока хранения объектов, уменьшит объем сканирования, который необходимо выполнить, и снизит нагрузку на ваш внутренний сервер.
(Принимая во внимание замечание ниже, вы можете убедиться, что кеш будет возвращать кешированные объекты с гораздо более коротким временем истечения срока действия кеша для посетителей вашего сайта, чем то, что ваш внутренний сервер установил для сервера кеширования, так что посетители по-прежнему будут обновлять контент достаточно часто. .)
Как только вы достигнете своей первой цели и все объекты всегда будут загружаться в кеш, и у вас будет быстрое время отклика, следующее препятствие, вероятно, будет заключаться в том, что ваши обновления, сделанные в вашем внутреннем контенте, станут видимыми для ваших посетителей слишком долго. .
В идеале вы хотите выборочно истекать и обновлять определенные объекты в кэше сразу после их обновления на внутреннем сервере, а не ждать их обычного истечения срока или полностью очищать кеш и повторно заполнять его с нуля.
Varnish и другие предоставляют поддержку специально для этого, обычно называемую HTTP ПРОДУВКА запрос.
Отправьте запрос PURGE, за которым следует обычный запрос GET, и объект будет обновлен в вашем кеше. И есть даже уже определенные плагины, которые будут делать это автоматически для Wordpress, а также всякий раз, когда публикуется новая статья или изменяется существующая (т.е. https://wordpress.org/plugins/tags/varnish/ )