⚡ 1) Кеширование данных/результатов запросов в Laravel
Laravel предоставляет единый API для работы с кешем — Redis, Memcached, DynamoDB, файл-драйвер и другие хранилища доступны «из коробки».
Это позволяет кешировать результаты тяжёлых запросов или вычислений, чтобы не выполнять их повторно при каждом HTTP-запросе.
Пример:
use Illuminate\Support\Facades\Cache;
$products = Cache::remember('products.active', 3600, function () {
return Product::where('active', true)->get();
});
🔹
remember() проверяет наличие ключа в кеше → если нет — выполняет запрос, сохраняет результат → использует кеш до истечения TTL (в секундах).⚡ 2) Полное кеширование HTTP-ответов (Response Cache)
Для страниц или API-эндпоинтов, результат которых редко меняется, можно кешировать весь HTTP-ответ. Это значит: тот же запрос не будет обрабатываться Laravel/Symfony — ответ будет браться из кеша.
🤝 Laravel
Существуют готовые пакеты (например, spatie/laravel-responsecache), которые автоматически кешируют весь ответ для GET-запросов:
composer require spatie/laravel-responsecacheПакет будет сохранять ответы и отдавать кешированные данные без обработки контроллера.
📍 Это даёт максимальное ускорение на страницах/эндпоинтах, которые не зависят от частых изменений — например, список товаров, главные страницы, публичные API.
⚡ 3) HTTP-кеширование через заголовки
Можно использовать HTTP-кеширование на уровне клиента и прокси: браузеры или CDN будут хранить ответы и не обращаться к серверу.
Пример установки заголовков в Laravel:
return response()->json($product)
->header('Cache-Control', 'public, max-age=3600')
->setEtag(md5($product->updated_at));
🔹
Cache-Control указывает, как долго браузер/CDN может хранить ответ.🔹 ETag позволяет клиенту проверить, изменился ли ресурс, без загрузки полного тела ответа.
📈 Такой подход особенно эффективен для API с часто повторяющимися запросами — уменьшает количество запросов к серверу и снижает нагрузку на процессор и базу.
⚡ 4) HTTP-кеширование в Symfony
Symfony поддерживает стандартизированное HTTP-кеширование (RFC 7234): можно настраивать TTL, validation-кеш, работу через обратные прокси.
Пример для компонента Symfony:
$response = new Response($content);
$response->setSharedMaxAge(3600); // кеш прокси
return $response;
🔹 Symfony может работать с reverse proxy (gateway cache), например с Varnish или встроенным HttpCache, что позволяет обходить приложение полностью при совпадении кеша.
📦 Такой кеш особенно полезен для статичных страниц, публичных API или фрагментов, которые долго остаются неизменными.
⚡ 5) Низкоуровневые кеш-стратегии
Помимо кеширования данных и ответов, можно:
🔹 кешировать вычисления, агрегации и подготовленные отчёты;
🔹 кешировать результаты внешних API-вызовов, чтобы не дергать их при каждом запросе;
🔹 кешировать конфигурацию/маршруты, чтобы уменьшить накладные расходы на bootstrap.
🧠 Когда это эффективно
✅ Высокая нагрузка на API/сервер
✅ Часто повторяющиеся запросы к одним и тем же данным
✅ Страницы, результаты поиска, публичные каталоги
✅ Обслуживание данных, которые редко меняются
⚠️ Что важно учитывать
⚠️ Если данные меняются часто — кеш нужно инвалидировать своевременно
⚠️ Неразумное кеширование может привести к устаревшим ответам
⚠️ Не все маршруты подходят для полного HTTP-кеша — динамические, приватные, зависящие от сессии должны быть исключены
Библиотека пхпшника