Вы когда-нибудь ждали, пока страница загрузится, а база данных кряхтит от запросов? Redis решает эту проблему. Это не просто хранилище ключей — это ракета для вашего приложения. В этой статье я покажу, как подключить Redis к Yii2 и использовать его для кеширования, сессий и очередей. Примеры кода прилагаются.
Что такое Redis и зачем он нужен в Yii2
Redis — это in-memory база данных. Она хранит данные в оперативной памяти, а не на диске. Поэтому она работает в разы быстрее обычных SQL-баз. В Yii2 Redis используют для трёх вещей:
- Кеширование — сохраняем результаты тяжёлых запросов.
- Сессии — храним данные пользователя без нагрузки на MySQL.
- Очереди — отправляем задачи на фоновую обработку.
Например, если у вас сайт с каталогом товаров, Redis может хранить популярные категории. Страница будет грузиться за миллисекунды.
Установка и настройка Redis в Yii2
Сначала установите Redis на сервер. На Ubuntu это делается одной командой:
sudo apt-get install redis-serverЗатем проверьте, что Redis работает:
redis-cli pingЕсли ответ PONG — всё отлично.
Теперь подключите Redis к Yii2. Установите расширение через Composer:
composer require yiisoft/yii2-redisДобавьте компонент в конфигурацию приложения (файл config/web.php или config/main.php):
'components' => [
'redis' => [
'class' => 'yii\redis\Connection',
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
],
],Готово. Теперь Yii2 может общаться с Redis.
Кеширование с Redis: примеры кода
Кеширование — самая популярная задача. В Yii2 есть специальный компонент cache. Используйте Redis как хранилище кеша.
Настройте компонент cache в конфигурации:
'components' => [
'cache' => [
'class' => 'yii\redis\Cache',
'redis' => [
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
],
],
],Теперь в контроллере или модели можно кешировать данные. Пример — кеширование списка статей:
$articles = Yii::$app->cache->getOrSet('articles_list', function () {
return Article::find()->all();
}, 3600);Здесь 3600 — время жизни кеша в секундах (1 час). Если данные не изменились, Redis вернёт их мгновенно.
Сессии в Redis: быстро и надёжно
Стандартные сессии PHP хранятся в файлах на диске. Это медленно и неудобно для кластеризации. Redis решает обе проблемы.
Настройте сессии через Redis в конфигурации:
'components' => [
'session' => [
'class' => 'yii\redis\Session',
'redis' => [
'hostname' => 'localhost',
'port' => 6379,
],
],
],Теперь все данные сессии хранятся в оперативной памяти. Это особенно полезно, если у вас несколько серверов — сессии будут общими.
Очереди задач с Redis
Иногда нужно выполнить задачу в фоне — например, отправить письмо или обработать изображение. Redis отлично подходит для очередей.
Yii2 не имеет встроенной очереди, но можно использовать расширение yii2-queue с Redis. Установите его:
composer require yiisoft/yii2-queueНастройте компонент очереди:
'components' => [
'queue' => [
'class' => 'yii\queue\redis\Queue',
'redis' => [
'hostname' => 'localhost',
'port' => 6379,
],
'channel' => 'myqueue',
],
],Теперь создайте задачу. Например, отправка email:
Yii::$app->queue->push(new SendEmailJob([
'email' => 'user@example.com',
'subject' => 'Hello',
]));Затем запустите воркер, который будет обрабатывать очередь:
php yii queue/listenRedis хранит задачи в списке, и воркер забирает их по одной.
Практические советы и лайфхаки
Вот несколько правил, которые сэкономят вам нервы:
| Ситуация | Что делать |
|---|---|
| Redis не отвечает | Проверьте, запущен ли сервис: systemctl status redis |
| Кеш слишком большой | Настройте политику вытеснения в Redis (например, allkeys-lru) |
| Сессии теряются | Убедитесь, что Redis не сбрасывается при перезагрузке (настройте save в конфиге) |
Что в итоге
Redis с Yii2 — это мощная связка для ускорения сайта. Вы научились настраивать кеширование, сессии и очереди. Теперь ваше приложение будет летать. Не бойтесь экспериментировать — Redis прощает ошибки.
Студия WNDER


