Налаштування Redis для кеширування даних у 1С-Bitrix
Стандартний кеш Bitrix записує дані у файли в /bitrix/cache/. На навантаженому сайті це тисячі дрібних файлів, операції з якими впираються в IOPS диску. Redis як сховище в пам'яті дає мікросекундний доступ до кешу та знімає навантаження з файлової системи.
Підключення 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 — кеш даних Bitrix
- БД 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
Bitrix використовує тегований кеш для інвалідації груп пов'язаних даних. При змін елемента інфоблоку тег 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 секунд — кешування безглуздо.







