Техническое задание: Оптимизация системы кеширования Laravel + Redis
Контекст проекта
Имеется крупный веб-проект на фреймворке Laravel с объёмом контента более 400 000 страниц. Для повышения производительности внедрено кеширование через Redis (драйвер phpredis), однако текущая реализация не справляется с полным покрытием и создаёт избыточную нагрузку на сервер.
Проблемы текущей реализации
- Ежесуточный полный сброс кеша неэффективен для такого объёма страниц.
- За 24 часа успевает закешироваться только около 50 000 страниц из 400 000+.
- Отсутствует механизм прогрева кеша, что приводит к пиковым нагрузкам на CPU после его сброса.
- Кеш инвалидируется глобально, а не на уровне отдельных изменений данных.
Основные цели проекта
- Полное кеширование сайта: Обеспечить 100% покрытие всех страниц проекта кешем.
- Снижение нагрузки на CPU: Минимизировать нагрузку на процессор за счёт эффективного кеширования и прогрева.
- Грамотная инвалидация: Настроить точечный сброс кеша в ответ на изменения данных, а не по расписанию.
Задачи для исполнителя
1. Аудит текущей системы
- Провести анализ текущего механизма кеширования в связке Laravel + Redis.
- Проверить корректность формирования ключей кеша, настройки TTL (времени жизни) и использования тегов (tags).
- Оценить логику и эффективность текущего процесса сброса кеша.
2. Реализация прогрева кеша
- Разработать и внедрить механизм предварительного прогрева (pre-warming) кеша для всех 400 000+ страниц.
- Решение должно быть масштабируемым и не вызывать отказов в обслуживании при выполнении.
- Прогрев должен быть управляемым (запускаться по необходимости, например, после деплоя).
3. Настройка событийной инвалидации
- Перестроить систему сброса кеша с ежесуточного цикла на событийную модель.
- Кеш конкретной страницы или группы страниц должен сбрасываться автоматически при изменении соответствующих данных в базе или админ-панели.
- Обеспечить возможность как точечного, так и группового сброса (например, по тегам).
Ожидаемый результат
- Все страницы сайта обслуживаются из кеша Redis.
- Значительное снижение средней и пиковой нагрузки на процессор сервера.
- Актуальность контента: пользователи сразу видят обновления после их публикации, без задержек в сутки.
- Стабильная и предсказуемая производительность сайта независимо от трафика.
Технический стек
Laravel, Redis (phpredis), Очереди (Queues) для фонового прогрева (желательно).