Настройка Redis для кеширования данных 1С-Битрикс
Стандартный кеш Битрикс пишет данные в файлы в /bitrix/cache/. На нагруженном сайте это тысячи мелких файлов, операции с которыми упираются в IOPS диска. Redis как in-memory хранилище даёт микросекундный доступ к кешу и снимает нагрузку с файловой системы.
Подключение Redis как кеш-бэкенд
В /bitrix/.settings.php добавьте или измените секцию cache:
'cache' => [
'value' => [
'type' => [
'class_name' => '\\Bitrix\\Main\\Data\\CacheEngineRedis',
'extension' => 'redis',
],
'sid' => 'site1', // уникальный префикс для разделения данных
],
],
Настройки подключения Redis задаются в отдельном файле /bitrix/php_interface/redis.php или через конфигурацию:
// /bitrix/php_interface/init.php
define('BX_CACHE_TYPE', 'redis');
define('BX_CACHE_SID', 'site1');
$GLOBALS['CACHE_REDIS'] = [
'host' => '127.0.0.1',
'port' => 6379,
'database' => 2, // отдельная БД от сессий
'timeout' => 2,
];
Разделение кеша и сессий
Используйте разные базы данных Redis (параметр database):
- БД 0 — зарезервирована по умолчанию
- БД 1 — сессии
- БД 2 — кеш данных Битрикс
- БД 3 — кеш HTML-страниц (если используется)
Это позволяет очищать кеш независимо от сессий: redis-cli -n 2 FLUSHDB очистит только кеш данных.
Конфигурация Redis для кеша данных
# /etc/redis/redis.conf
bind 127.0.0.1
port 6379
maxmemory 1gb
maxmemory-policy allkeys-lru # вытеснять наименее используемые при нехватке памяти
activerehashing yes
tcp-keepalive 300
allkeys-lru — правильная политика для кеша: когда память заполняется, вытесняются редко используемые ключи. Для сессий лучше volatile-lru (вытесняет только ключи с TTL).
Тегированный кеш с Redis
Битрикс использует тегированный кеш для инвалидации групп связанных данных. При изменении элемента инфоблока тег iblock_id_N инвалидирует весь кеш, связанный с этим инфоблоком. Redis хранит теги эффективнее файловой системы — нет проблемы с тысячами мелких файлов.
Проверьте, что тегированный кеш работает:
redis-cli -n 2 KEYS "BITRIX_CACHE_TAG_*" | head -20
Если ключей нет — тегированный кеш не используется или данные ещё не закешированы.
Мониторинг кеша
# Статистика использования
redis-cli -n 2 INFO stats | grep -E "keyspace_hits|keyspace_misses"
# Hit rate = hits / (hits + misses)
# Цель: > 90%
# Количество ключей
redis-cli -n 2 DBSIZE
# Использование памяти
redis-cli INFO memory | grep used_memory_human
Низкий hit rate (< 70%) означает, что кеш сбрасывается слишком часто или TTL слишком маленький. Проверьте частоту инвалидации тегов: если каждые 10 секунд меняются данные инфоблока, весь кеш инфоблока сбрасывается каждые 10 секунд — кешировать бессмысленно.







