Налаштування Redis для кешування сесій Magento 2

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Redis для кешування сесій Magento 2
Середня
від 1 робочого дня до 3 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

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