Повертаючись до відповіді на моє власне питання, головна проблема тут полягає в тому, як уникнути того, що все завжди закінчується одночасно. Якщо це дозволено, система сповільниться та стане перевантаженою під час повторного заповнення кешу.
Здебільшого це насправді не є проблемою на практиці. З часом всі компоненти мають тенденцію до дрейфу в залежності від часу, який закінчується. Якщо декілька компонентів переробляються одночасно, це кодовий запах, оскільки вони, ймовірно, повинні кешуватися разом як єдиний компонент (наприклад, якщо ви мали унікальний кеш сторінки, тіла та нижнього колонтитулу сторінки, кешовані окремо, можливо, ви можете просто кешуйте саму сторінку).
Звичайно, є випадки, коли багато речей потрібно кешувати за один раз, наприклад, після запуску системи, якщо ми очистили весь кеш або повернули кеш-клавіші. У цьому випадку це не так вже й погано, оскільки компоненти швидко заповнюються, а термін дії згодом розпливеться.
Наскільки це проблема, є кілька рішень:
- Просто виберіть тривалість закінчення терміну дії кешу в межах діапазону замість фіксованої тривалості, наприклад, випадкове ціле число від 15 до 90 хвилин замість 60 хвилин.
- Дозволити несвіжі відповіді. Тільки тому, що термін дії кешу минув, не означає, що ви не можете його використовувати, якщо він все ще є. Залежно від потреб бізнесу, може бути прийнятним використовувати його, якщо після закінчення терміну дії буде випущено оригінальну версію. У HTTP це мета "must revalidate" (якщо це правда, це означає не використовувати кешовану версію після закінчення терміну дії).