Выбор ответа Junior Кеширование спрашивают часто обновлено
LocMemCache с несколькими воркерами
Вопрос
В проде 4 процесса gunicorn и LocMemCache. После обновления цены часть пользователей видит старую цену. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: У каждого процесса свой кеш в памяти, и инвалидация не доходит до других. LocMemCache живёт внутри процесса.
Варианты ответа
- У каждого процесса свой кеш в памяти, и инвалидация не доходит до другихправильный ответ
- LocMemCache не поддерживает TTL, поэтому ключ живёт до перезапуска сервера
- Gunicorn кеширует ответы воркеров и отдаёт их, пока не придёт новый деплой
- Django не умеет удалять ключи из LocMemCache, только перезаписывать их
Разбор
LocMemCache живёт внутри процесса. Удаление ключа в воркере, который обработал обновление, не трогает копии в трёх других, и они отдают старое значение до истечения TTL. Для нескольких процессов и серверов нужен общий кеш: Redis или Memcached. TTL у LocMemCache есть, а gunicorn ответы не кеширует.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.