Настройка Redis для кэширования сессий Magento 2

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка Redis для кэширования сессий Magento 2
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка Redis для кэширования сессий Magento 2

Magento 2 поддерживает два независимых Redis-подключения: одно для кэша приложения (блоки, конфигурация, FPC), другое для сессий пользователей. Разделение на разные базы Redis — обязательная практика, иначе операция FLUSHDB при очистке кэша удаляет активные сессии всех покупателей.

Зачем Redis для сессий

По умолчанию Magento хранит сессии в файловой системе (var/session/). При росте трафика это создаёт проблемы:

  • тысячи мелких файлов на одной FS создают inode-давление
  • файловые блокировки при параллельных AJAX-запросах от одного пользователя
  • на кластере несколько нод не видят сессии друг друга

Redis решает все три проблемы: атомарные операции без блокировок, централизованное хранение, работает с Redis Sentinel/Cluster для HA.

Конфигурация env.php

Полная конфигурация в app/etc/env.php:

'session' => [
    'save' => 'redis',
    'redis' => [
        'host'                    => '127.0.0.1',
        'port'                    => '6379',
        'password'                => 'strongpassword',
        'timeout'                 => '2.5',
        'persistent_identifier'   => '',
        'database'                => '2',      // отдельная БД от кэша
        'compression_threshold'   => '2048',
        'compression_lib'         => 'gzip',
        'log_level'               => '1',
        'max_concurrency'         => '6',
        'break_after_frontend'    => '5',
        'break_after_adminhtml'   => '30',
        'first_lifetime'          => '600',
        'bot_first_lifetime'      => '60',
        'bot_lifetime'            => '7200',
        'disable_locking'         => '0',
        'min_lifetime'            => '60',
        'max_lifetime'            => '29500',
        'sentinel_master'         => '',
        'sentinel_servers'        => '',
        'sentinel_connect_retries'=> '5',
        'sentinel_verify_master'  => '0',
    ],
],

Кэш приложения — отдельный блок в том же env.php:

'cache' => [
    'frontend' => [
        'default' => [
            'backend' => 'Cm_Cache_Backend_Redis',
            'backend_options' => [
                'server'            => '127.0.0.1',
                'port'              => '6379',
                'database'          => '0',      // БД 0 для кэша
                'password'          => 'strongpassword',
                'compress_data'     => '1',
                'compress_tags'     => '1',
                'compression_lib'   => 'gzip',
                'read_timeout'      => '1.5',
            ],
        ],
        'page_cache' => [
            'backend' => 'Cm_Cache_Backend_Redis',
            'backend_options' => [
                'server'   => '127.0.0.1',
                'port'     => '6379',
                'database' => '1',           // БД 1 для FPC
                'password' => 'strongpassword',
                'compress_data' => '0',      // FPC не сжимаем: больше памяти, быстрее
            ],
        ],
    ],
],

Итого три базы Redis: 0 — кэш, 1 — FPC, 2 — сессии.

Настройка Redis под нагрузку Magento

/etc/redis/redis.conf (параметры, специфичные для Magento):

maxmemory 2gb
maxmemory-policy allkeys-lru

# Сессии не должны вытесняться → выделяем отдельный инстанс
# Лучше запускать два redis: :6379 для кэша, :6380 для сессий

save ""            # Для кэша persistence не нужна
appendonly no

tcp-keepalive 60
timeout 300

Для сессий на отдельном порту /etc/redis/redis-sessions.conf:

port 6380
maxmemory 512mb
maxmemory-policy noeviction   # сессии нельзя вытеснять
appendonly yes                # persistence для сессий
appendfsync everysec

Тогда в env.php для сессий меняем порт на 6380 и database на 0.

Проверка работы

# Убедиться что сессии пишутся в Redis
redis-cli -p 6380 KEYS "sess_*" | wc -l

# Посмотреть содержимое сессии
redis-cli -p 6380 GET "sess_abc123xyz"

# Мониторинг в реальном времени
redis-cli -p 6379 MONITOR | grep -i "sess\|cache"

# Hit rate кэша
redis-cli -p 6379 INFO stats | grep -E "keyspace_hits|keyspace_misses"

Hit rate кэша должен быть выше 80%. Если ниже — max_lifetime слишком маленький или maxmemory недостаточно и LRU вытесняет свежие записи.

Параметр max_concurrency и блокировки

max_concurrency = 6 означает максимум 6 параллельных запросов к одной сессии. Для AJAX-тяжёлых страниц (фильтры, сравнение) увеличить до 10–15. При disable_locking = 1 убираем блокировки полностью — подходит для read-heavy сессий, но может вызвать race condition при одновременном добавлении товаров в корзину.

Сроки работ

Настройка двух Redis-инстансов, конфигурация env.php, тестирование сессий и кэша: 1 день. Настройка Redis Sentinel для HA (если требуется): 1–2 дня дополнительно.