Выбор ответа Middle Кеш и очереди обновлено

Удалить ключ или обновить при изменении

Вопрос

При изменении товара в cache-aside почему чаще удаляют ключ из кеша, а не записывают туда новое значение?

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

Выберите вариант, и откроется разбор.

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

Коротко

Правильный ответ: При гонке запись закрепит старое значение, удаление нет. Два параллельных обновления могут записать в базу в одном порядке, а в кеш в другом, и в кеше останется старая версия до истечения TTL.

Варианты ответа

  1. Удаление в Redis быстрее записи и не держит блокировку
  2. Redis не умеет перезаписывать существующие ключи атомарно
  3. При гонке запись закрепит старое значение, удаление нетправильный ответ
  4. Так требует протокол HTTP для кешируемых ответов

Разбор

Два параллельных обновления могут записать в базу в одном порядке, а в кеш в другом, и в кеше останется старая версия до истечения TTL. Удаление безопаснее: следующий читатель возьмёт актуальные данные из базы. Окно гонки остаётся, но оно короче, а TTL ограничивает ущерб.

  • Разница в скорости SET и DEL несущественна.
  • Перезаписывать ключи Redis умеет.
  • HTTP к внутреннему кешу отношения не имеет.

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

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