Выбор ответа Senior Производительность: OPcache и FPM обновлено
Кеш и его инвалидация
Вопрос
Главная страница каталога строится 800 мс из-за тяжёлых запросов. Какой подход разумнее всего?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Redis с TTL, сброс по изменению товаров и защита от stampede. Общий кеш в Redis или Memcached доступен всем воркерам и серверам.
Варианты ответа
- Redis с TTL, сброс по изменению товаров и защита от stampedeправильный ответ
- Кешировать результат в статическую переменную PHP-класса каталога
- Кешировать в сессии каждого пользователя при первом заходе
- Не кешировать, а увеличить число воркеров
pm.max_children
Разбор
Общий кеш в Redis или Memcached доступен всем воркерам и серверам. TTL ограничивает устаревание, а сброс по событию даёт свежесть. Без защиты при истечении ключа сотни запросов одновременно начнут пересчёт (cache stampede), поэтому используют блокировку (Cache::lock, Cache::flexible в Laravel 11+) или отдачу устаревшего значения на время пересчёта. Статическая переменная живёт один запрос в FPM, сессия дублирует данные на каждого пользователя.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.