Настройка 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 дня дополнительно.







