Выбор ответа Middle Кеш и очереди обновлено
Удалить ключ или обновить при изменении
Вопрос
При изменении товара в cache-aside почему чаще удаляют ключ из кеша, а не записывают туда новое значение?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: При гонке запись закрепит старое значение, удаление нет. Два параллельных обновления могут записать в базу в одном порядке, а в кеш в другом, и в кеше останется старая версия до истечения TTL.
Варианты ответа
- Удаление в Redis быстрее записи и не держит блокировку
- Redis не умеет перезаписывать существующие ключи атомарно
- При гонке запись закрепит старое значение, удаление нетправильный ответ
- Так требует протокол HTTP для кешируемых ответов
Разбор
Два параллельных обновления могут записать в базу в одном порядке, а в кеш в другом, и в кеше останется старая версия до истечения TTL. Удаление безопаснее: следующий читатель возьмёт актуальные данные из базы. Окно гонки остаётся, но оно короче, а TTL ограничивает ущерб.
- Разница в скорости SET и DEL несущественна.
- Перезаписывать ключи Redis умеет.
- HTTP к внутреннему кешу отношения не имеет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.