Налаштування 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 дні додатково.







