В 16-ом уроке мы разберем одну из ключевых тем для оптимизации вашего приложения, это кеширование в Laravel. Кеширование позволяет ускорить работу сайта, уменьшить нагрузку на базу данных и сервер, а также улучшить пользовательский опыт.
В этом уроке мы научимся:
- Настраивать Redis и Memcached.
- Сохранять и получать данные из кеша.
- Кешировать запросы к базе данных.
- Очищать кеш через Artisan.
Также вас ждут практические задачи и примеры кода.
Настройка кеша: Redis и Memcached
Laravel поддерживает несколько драйверов кеширования: файловый, база данных, Memcached, Redis и другие.
Начнем с настройки самых популярных, Redis и Memcached.
Установка и настройка Redis
- Установите Redis на сервер:
# Для Ubuntu/Debian sudo apt-get install redis-server
- Убедитесь, что Redis запущен:
sudo systemctl status redis
- Установите пакет для работы с Redis в Laravel:
composer require predis/predis
- В файле
.env
укажите драйвер кеша:CACHE_DRIVER=redis REDIS_HOST=127.0.0.1 REDIS_PORT=6379
Установка и настройка Memcached
- Установите Memcached:
# Для Ubuntu/Debian sudo apt-get install memcached sudo apt-get install php-memcached
- Включите модуль Memcached в PHP:
sudo phpenmod memcached
- В
.env
пропишите:CACHE_DRIVER=memcached
Сохранение и получение данных из кеша
Работа с кешем в Laravel осуществляется через фасад Cache
. Рассмотрим основные методы.
Сохранение данных
- Простое сохранение:
minate\Support\Facades\Cache; Cache::put('ключ', 'значение', $seconds = 60); // Хранится 60 секунд
- Сохранение навсегда:
Cache::forever('ключ', 'значение');
- Добавление, если ключа нет:
Cache::add('уникальный_ключ', 'данные', 120); // Добавится, только если ключ не существует
Получение данных
- Получить значение:
$value = Cache::get('ключ');
- Получить значение или вернуть по умолчанию:
$value = Cache::get('ключ', 'значение_по_умолчанию');
- Получить и удалить:
$value = Cache::pull('ключ');
Пример: Кеширование данных пользователя
public function getUser($userId) { return Cache::remember('user_' . $userId, 60 * 5, function () use ($userId) { return User::find($userId); // Запрос выполнится, только если данных нет в кеше }); }
Метод remember
сначала проверяет кеш. Если данных нет — выполняет замыкание и сохраняет результат.
Кеширование запросов к базе данных
Один из самых эффективных способов ускорить приложение, это кешировать результаты тяжелых SQL-запросов.
Используем метод cache()
Laravel позволяет кешировать запросы прямо в Eloquent:
$users = User::where('active', true) ->orderBy('created_at', 'desc') ->cache(now()->addMinutes(10)) // Кешируем на 10 минут ->get();
Кеширование с тегами (только для Redis/Memcached)
Теги позволяют группировать кеш и очищать его по категориям:
Cache::tags(['users', 'posts'])->put('ключ', $data, 600); // Очистка всех данных с тегом 'users' Cache::tags('users')->flush();
Очистка кеша через Artisan
Управлять кешем можно через консольные команды.
Основные команды
- Очистить весь кеш:
php artisan cache:clear
- Очистить кеш конфигурации:
php artisan config:clear
- Очистить кеш маршрутов:
php artisan route:clear
- Очистить кеш представлений:
php artisan view:clear
Пример: Очистка кеша при обновлении данных
Допустим, при изменении профиля пользователя мы хотим обновить кеш:
public function updateProfile($userId, $data) { User::find($userId)->update($data); Cache::forget('user_' . $userId); // Удаляем старый кеш }
Практические задачи
Закрепим знания на практике!
Задача 1: Настройте Redis
- Установите Redis на локальную машину.
- Настройте Laravel для работы с Redis.
- Создайте маршрут
/test-redis
, который сохраняет в кеш строку «Hello Redis» и возвращает ее.
Решение:
// routes/web.php Route::get('/test-redis', function () { Cache::put('test_message', 'Hello Redis', 60); return Cache::get('test_message'); });
Задача 2: Кешируйте популярные посты
Допустим, у вас есть модель Post
. Закешируйте 10 самых популярных постов на 30 минут.
Решение:
$posts = Post::orderBy('views', 'desc') ->take(10) ->cache(now()->addMinutes(30)) ->get();
Итоги 16-го урока
Теперь вы умеете работать с кешем в Laravel. Это мощный инструмент, который сделает ваше приложение быстрее и стабильнее. Не забывайте также об кеширование, используйте его там, где данные редко меняются, а запросы ресурсоемки.