Если актуальность отчёта зависит от изменений данных, используйте событийную инвалидацию или версию исходных данных, а TTL оставьте страховкой. Частоту обновления определяет допустимая устарелость.
Есть большой важный отчёт, который долго формируется, мы его кэшируем, но не знаем, как часто нужно его обновлять (в разные периоды по-разному, в зависимости от изменения данных). Как устроена инвалидация кэша в таком случае, как её делать?
Если актуальность отчёта зависит от изменений данных, используйте событийную инвалидацию или версию исходных данных, а TTL оставьте страховкой. Частоту обновления определяет допустимая устарелость.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Если актуальность отчёта зависит от изменений данных, используйте событийную инвалидацию или версию исходных данных, а TTL оставьте страховкой. Частоту обновления определяет допустимая устарелость.
После commit изменения помечайте затронутый отчёт устаревшим либо увеличивайте version, входящую в ключ кеша. Outbox помогает не потерять событие между БД и доставкой. При пересчёте фиксируйте версию входных данных, чтобы старый результат не затёр новый. Дорогой отчёт можно обновлять в фоне со stale-while-revalidate и блокировкой от массового пересчёта.