Выбор ответа Junior Кеширование спрашивают часто обновлено

LocMemCache с несколькими воркерами

Вопрос

В проде 4 процесса gunicorn и LocMemCache. После обновления цены часть пользователей видит старую цену. Почему?

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

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

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

Коротко

Правильный ответ: У каждого процесса свой кеш в памяти, и инвалидация не доходит до других. LocMemCache живёт внутри процесса.

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

  1. У каждого процесса свой кеш в памяти, и инвалидация не доходит до другихправильный ответ
  2. LocMemCache не поддерживает TTL, поэтому ключ живёт до перезапуска сервера
  3. Gunicorn кеширует ответы воркеров и отдаёт их, пока не придёт новый деплой
  4. Django не умеет удалять ключи из LocMemCache, только перезаписывать их

Разбор

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

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

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