Ответ вслух Senior Кеширование обновлено

Инвалидация кеша

Вопрос

Как вы организуете инвалидацию кеша карточек товаров, если цену меняют несколько сервисов?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Если цену меняют разные сервисы, полагаться на то, что каждый не забудет удалить ключ, рискованно. Я бы взял источник истины, таблицу цен, и поток изменений из неё: CDC через Debezium или outbox, события уходят в Kafka, отдельный подписчик удаляет или обновляет ключи в Redis.

Что должно прозвучать в ответе

  • TTL как страховка всегда

  • Удаление ключа после записи в БД, а не перезапись

  • События изменений через CDC или outbox, единый подписчик чистит кеш

  • Версионирование ключей

  • Критичные данные (цена при оплате) читаются из БД, а не из кеша

Что могут спросить следом

  • Что если событие об изменении потерялось?
  • Как сбросить локальные кеши на 30 экземплярах?

Разбор

Если цену меняют разные сервисы, полагаться на то, что каждый не забудет удалить ключ, рискованно. Я бы взял источник истины, таблицу цен, и поток изменений из неё: CDC через Debezium или outbox, события уходят в Kafka, отдельный подписчик удаляет или обновляет ключи в Redis. На случай потери события всё равно стоит TTL, например 10 минут. Для локальных кешей в процессах рассылаю событие сброса через pub/sub. И главное: при оформлении заказа цену берём из БД, кеш годится для показа, но не для расчёта денег.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.