Есть большой важный отчёт, который долго формируется, мы его кэшируем, но не знаем, как часто нужно его обновлять (в разные периоды по-разному, в зависимости от изменения данных). Как устроена инвалидация кэша в таком случае, как её делать?

Если актуальность отчёта зависит от изменений данных, используйте событийную инвалидацию или версию исходных данных, а TTL оставьте страховкой. Частоту обновления определяет допустимая устарелость.

Короткий ответ

Что ответить на собеседовании

Если актуальность отчёта зависит от изменений данных, используйте событийную инвалидацию или версию исходных данных, а TTL оставьте страховкой. Частоту обновления определяет допустимая устарелость.

Подробный разбор

Ответ с пояснениями

Если актуальность отчёта зависит от изменений данных, используйте событийную инвалидацию или версию исходных данных, а TTL оставьте страховкой. Частоту обновления определяет допустимая устарелость.

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее