Инвалидация кеша
Вопрос
Как вы организуете инвалидацию кеша карточек товаров, если цену меняют несколько сервисов?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
TTL как страховка всегда
Удаление ключа после записи в БД, а не перезапись
События изменений через CDC или outbox, единый подписчик чистит кеш
Версионирование ключей
Критичные данные (цена при оплате) читаются из БД, а не из кеша
Что могут спросить следом
- Что если событие об изменении потерялось?
- Как сбросить локальные кеши на 30 экземплярах?
Разбор
Если цену меняют разные сервисы, полагаться на то, что каждый не забудет удалить ключ, рискованно. Я бы взял источник истины, таблицу цен, и поток изменений из неё: CDC через Debezium или outbox, события уходят в Kafka, отдельный подписчик удаляет или обновляет ключи в Redis. На случай потери события всё равно стоит TTL, например 10 минут. Для локальных кешей в процессах рассылаю событие сброса через pub/sub. И главное: при оформлении заказа цену берём из БД, кеш годится для показа, но не для расчёта денег.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.