Настройка Redis для 1С-Битрикс
Настройка Redis для 1С-Битрикс
На проекте с высокой конкурентностью Memcached не справляется с тегированным кэшем: инвалидация по тегу требует сканирования всех ключей, что при 50 000+ ключах в кэше занимает сотни миллисекунд и блокирует другие операции. Redis решает эту задачу через нативные структуры Set — тег хранит множество ключей, инвалидация — атомарная операция SMEMBERS + DEL.
Кроме кэша, Redis используется в Битрикс для сессий, очередей в бизнес-процессах и pub/sub в B24-коробке.
Установка и базовая конфигурация
apt install redis-server php-redis
/etc/redis/redis.conf — ключевые параметры для Битрикс:
# Сетевой доступ
bind 127.0.0.1
port 6379
protected-mode yes
# Память
maxmemory 2gb
maxmemory-policy allkeys-lru
# Персистентность (для кэша можно отключить)
save "" # отключаем RDB snapshot
appendonly no # отключаем AOF
# Для сессий — включаем персистентность
# save 900 1
# appendonly yes
# Производительность
tcp-backlog 511
tcp-keepalive 300
hz 20
# Логирование
loglevel notice
logfile /var/log/redis/redis-server.log
maxmemory-policy allkeys-lru — при достижении лимита памяти вытесняем наименее используемые ключи. Для кэша это правильная политика. Для сессий используйте noeviction — лучше получить ошибку, чем потерять сессию пользователя.
Отключение персистентности (save "", appendonly no) для Redis, используемого только как кэш — нет смысла писать на диск то, что и так будет инвалидировано.
Подключение к Битрикс
Через модуль sprint.migration или напрямую в .settings.php:
// /bitrix/.settings.php
return [
'cache' => [
'value' => [
'type' => \Bitrix\Main\Data\CacheEngineRedis::class,
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'db' => 0,
],
'sid' => md5($_SERVER['DOCUMENT_ROOT']),
],
],
'session' => [
'value' => [
'mode' => 'default',
'handlers' => [
'general' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'db' => 1, // отдельная БД от кэша
],
],
],
],
];
Разделяем кэш (db:0) и сессии (db:1) — разные политики вытеснения, раздельный мониторинг.
Redis Sentinel для отказоустойчивости
Один сервер Redis — точка отказа. Redis Sentinel обеспечивает автоматический failover:
redis-master (10.0.0.10:6379)
redis-replica (10.0.0.11:6379)
sentinel-1, sentinel-2, sentinel-3 (порт 26379)
sentinel.conf:
sentinel monitor bitrix-master 10.0.0.10 6379 2
sentinel down-after-milliseconds bitrix-master 5000
sentinel failover-timeout bitrix-master 10000
sentinel parallel-syncs bitrix-master 1
Кворум 2 — при недоступности мастера два из трёх сентинелей должны договориться о failover.
Битрикс подключается к Sentinel, а не напрямую к мастеру — нужна кастомная реализация класса кэша или использование Predis с поддержкой Sentinel.
Мониторинг
redis-cli info stats | grep -E "keyspace_hits|keyspace_misses|evicted_keys|connected_clients"
redis-cli info memory | grep -E "used_memory_human|maxmemory_human|mem_fragmentation_ratio"
mem_fragmentation_ratio > 1.5 — сильная фрагментация памяти. Выполняем redis-cli memory purge или перезапускаем Redis в окне обслуживания.
evicted_keys растёт — maxmemory слишком мал. Увеличиваем или анализируем, что занимает память:
redis-cli --bigkeys
Использование Redis для очередей B24
В Bitrix24 коробочной версии Redis используется для очередей push-уведомлений и реального времени:
// Проверяем наличие модуля push-server
\Bitrix\Main\Loader::includeModule('pull');
\CPullOptions::SetQueueServerType('redis');
\CPullOptions::SetRedisConfig(['host' => '127.0.0.1', 'port' => 6379]);







