Налаштування Redis для кеширування сесій у 1С-Bitrix
За замовчуванням PHP зберігає сесії у файлах на диску. При високому трафіку або кількох серверах за балансувальником навантаження це створює проблеми: файлова система не масштабується, а сесії користувача повинні потрапляти на один сервер. Redis вирішує обидві проблеми.
Встановлення та базова конфігурація Redis
Встановіть Redis та розширення PHP:
# Ubuntu/Debian
apt install redis-server php-redis
# CentOS/RHEL
yum install redis php-pecl-redis
Базова конфігурація у /etc/redis/redis.conf для сесій:
bind 127.0.0.1
port 6379
maxmemory 256mb
maxmemory-policy allkeys-lru
save "" # відключити постійність для сесій
Підключення PHP-сесій до Redis
У php.ini або у файлі конфігурації сайту:
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?weight=1&timeout=2&prefix=SESS_&database=1"
Параметри save_path: timeout — таймаут підключення в секундах, prefix — префікс ключів для ізоляції від інших даних, database — номер бази даних Redis (0–15).
Для Bitrix сесії керуються через /bitrix/php_interface/dbconn.php або bitrix/.settings.php. Найкращий спосіб — встановити параметри через конфігурацію веб-сервера для конкретного віртуального хоста, а не глобально у php.ini.
Налаштування через .settings.php Bitrix
Bitrix підтримує користувацькі обробники сесій через розділ session у /bitrix/.settings.php:
'session' => [
'value' => [
'mode' => 'default',
'handlers' => [
'general' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'serializer' => \Redis::SERIALIZER_PHP,
'database' => 1,
'ttl' => 86400,
],
],
],
],
Перевірка роботи
// Перевірити, що сесії йдуть у Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->select(1);
$keys = $redis->keys('SESS_*');
echo count($keys) . ' активних сесій';
Також перевіртьте redis-cli monitor — показує операції Redis у реальному часі. При нормальній роботі ви побачите GET SESS_<id> при кожному запиті та SET SESS_<id> при змін сесії.
Важлива особливість: сесії Bitrix
Bitrix зберігає в сесії автентифікацію, кошик (для неавторизованих), токени CSRF. session_write_close() викликається в кінці запиту. Якщо в обробнику є блокування — при високій конкурентності запити користувача можуть вишиковуватися в чергу. У більшості випадків це нормально, але для AJAX-важких сторінок варто викликати session_write_close() відразу після читання даних сесії, якщо подальший запис не потрібен.







