Прискорюємо сайт на Бітрікс: Redis для кешу, сесій та черг

Чому Redis, а не Memcached? На проекті інтернет-магазину з каталогом у 120 000 товарів і піковим навантаженням у 500 одночасних користувачів Memcached перестав справлятися з тегованим кешем. Інвалідація за тегом вимагала сканування всіх ключів — при 50 000+ ключах це займало 3–5 секунд, блокуючи
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Прискорюємо сайт на Бітрікс: Redis для кешу, сесій та черг
Простий
~1 день

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1164

Чому 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-кластер. Процес:

  1. Встановлюємо репліку і три сентинелі.
  2. Налаштовуємо моніторинг майстра.
  3. В Бітрікс використовуємо бібліотеку predis/predis — вона підтримує підключення через Sentinel.
  4. Прописуємо в .settings.php точку підключення до сентинелів.
  5. Тестуємо 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 рази. Зв'яжіться з нами для оцінки вашого проекту — ми підберемо конфігурацію під навантаження.