Вы когда-нибудь ждали, пока страница загрузится, а база данных кряхтит от запросов? 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 превратится в помойку.

Сессии в 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/listen

Redis хранит задачи в списке, и воркер забирает их по одной.

Практические советы и лайфхаки

Вот несколько правил, которые сэкономят вам нервы:

СитуацияЧто делать
Redis не отвечаетПроверьте, запущен ли сервис: systemctl status redis
Кеш слишком большойНастройте политику вытеснения в Redis (например, allkeys-lru)
Сессии теряютсяУбедитесь, что Redis не сбрасывается при перезагрузке (настройте save в конфиге)
Лайфхак: Используйте Redis для хранения временных данных, например, кодов подтверждения или результатов API-запросов. Это снизит нагрузку на основную БД.

Что в итоге

Redis с Yii2 — это мощная связка для ускорения сайта. Вы научились настраивать кеширование, сессии и очереди. Теперь ваше приложение будет летать. Не бойтесь экспериментировать — Redis прощает ошибки.

Студия WNDER