Возвращаясь, чтобы ответить на мой собственный вопрос, главная проблема здесь состоит в том, как избежать всего, что истекает в одно и то же время. Если это разрешено, система замедлится и станет перегруженной, пока она переполняет кэш.
В большинстве случаев это не проблема на практике. Со временем все компоненты имеют тенденцию дрейфовать с точки зрения времени их истечения. Если несколько компонентов перестраиваются одновременно, это - запах кода, потому что они, вероятно, должны быть кэшированы вместе как один компонент (например, если у вас были кеширован уникальный заголовок страницы, тело и нижний колонтитул отдельно, возможно, вы можете просто кешируй саму страницу).
Конечно, бывают случаи, когда многие вещи необходимо кэшировать одновременно, например, после запуска системы, если мы очистили весь кеш или повернули ключи кеша. В этом случае, как правило, это не так плохо, потому что компоненты быстро заполняются, и истечения срока действия впоследствии будут расходиться.
Если это проблема, есть несколько решений:
- Просто выберите случайный срок действия кэша в пределах диапазона вместо фиксированной, например, случайное целое число от 15 до 90 минут вместо 60 минут.
- Разрешить устаревшие ответы. То, что срок действия элемента кэша истек, не означает, что вы не сможете его использовать, если он все еще там. В зависимости от потребностей бизнеса, может быть приемлемо использовать его, если есть проблемы с производительностью при извлечении исходной версии после истечения срока действия. В HTTP это является целью "must-revalidate" (если true, это означает, что не следует использовать кэшированную версию после истечения срока действия).