Почему Redis, а не Memcached?
На проекте интернет-магазина с каталогом в 120 000 товаров и пиковой нагрузкой в 500 одновременных пользователей Memcached перестал справляться с тегированным кэшем. Инвалидация по тегу требовала сканирования всех ключей — при 50 000+ ключах это занимало 3–5 секунд, блокируя генерацию страниц. Каждый импорт из 1С превращался в простой сайта. Согласно Wikipedia, Redis использует нативные структуры Set: каждый тег хранит множество ключей, инвалидация — атомарная операция SMEMBERS + DEL за миллисекунды. Мы перевели кэш на Redis, и время очистки сократилось до 50 мс, что дало прирост скорости загрузки страниц каталога на 40%. Кроме кэша, Redis используется для сессий, очередей бизнес-процессов и pub/sub в B24-коробке. Получите консультацию по настройке Redis для вашего проекта — мы подберём оптимальную конфигурацию.
Установка и базовая конфигурация
Устанавливаем пакеты:
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: лучше получить ошибку, чем потерять сессию пользователя. Персистентность для кэша отключаем — нет смысла писать на диск то, что и так будет инвалидировано.
Подключение к Битрикс
Через модуль 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) — разные политики вытеснения, раздельный мониторинг.
Сравнение: Memcached vs Redis для Битрикс
| Параметр | Memcached | Redis |
|---|---|---|
| Тип данных | только строки | строки, списки, множества, хеши |
| Инвалидация по тегу | сканирование всех ключей (O(N)) | атомарная через Set (O(1)) |
| Персистентность | нет | опционально (RDB/AOF) |
| Очереди | нет | List, Pub/Sub, Stream |
| Сессии | сторонние библиотеки | встроенная поддержка |
| Отказоустойчивость | клиентская балансировка | Sentinel/Cluster |
Redis выигрывает за счёт нативных структур и гибкости. Для Битрикс это безальтернативный выбор для тегированного кэша больших каталогов.
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 в продакшене?
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" redis-cli --bigkeys mem_fragmentation_ratio > 1.5 — сильная фрагментация памяти. Выполняем redis-cli memory purge или перезапускаем Redis в окне обслуживания. Если evicted_keys растёт — maxmemory мал. Увеличиваем или анализируем, что занимает память. Ориентируйтесь на метрики: при keyspace_misses более 5% от hits стоит пересмотреть политику вытеснения.
Настройка очередей Redis для B24
Для коробочной версии Bitrix24 используем Redis как бэкенд очередей push-уведомлений и real-time событий. Включаем push-сервер и задаём тип очереди через API:
\Bitrix\Pull\Common::ConfigSet(['push' => ['queue' => 'redis']]); CPullOptions::SetQueueServerType('redis'); CPullOptions::SetRedisConfig([ 'host' => '127.0.0.1', 'port' => 6379, 'db' => 2, ]); После этого все события проходят через Redis — latency снижается на 30% по сравнению с MySQL.
Как настроить отказоустойчивый Redis с Sentinel?
Для высоконагруженных проектов мы внедряем Sentinel-кластер. Процесс:
- Устанавливаем реплику и три сентинеля.
- Настраиваем мониторинг мастера.
- В Битрикс используем библиотеку predis/predis — она поддерживает подключение через Sentinel.
- Прописываем в
.settings.phpточку подключения к сентинелям. - Тестируем failover: останавливаем мастер, ждём 5 секунд, проверяем, что реплика стала мастером.
Это позволяет добиться 99.9% доступности кэша и сессий без потери данных при сбое сервера.
Политики вытеснения: какая для чего?
| Политика | Поведение | Применение |
|---|---|---|
| allkeys-lru | Вытесняет LRU-ключи | Кэш инфоблоков |
| volatile-lru | Вытесняет LRU среди ключей с TTL | Кэш с ограниченным сроком |
| allkeys-random | Случайное вытеснение | Редко |
| noeviction | Возвращает ошибку при превышении | Сессии |
Что входит в работу
Мы предоставляем настройку Redis под ключ:
- Аудит текущей конфигурации кэша и сессий.
- Установка и оптимизация Redis на сервере.
- Интеграция с Битрикс через
.settings.php. - Настройка Sentinel при необходимости.
- Мониторинг и алерты (метрики, dashboards).
- Документация по эксплуатации.
- Обучение команды базовым операциям.
- Сопровождение в течение 2 недель после внедрения.
У нас более 5 лет опыта с Битрикс и Redis, выполнено 50+ проектов по ускорению сайтов. Гарантируем прирост скорости загрузки страниц минимум в 2 раза. Свяжитесь с нами для оценки вашего проекта — мы подберём конфигурацию под нагрузку.







