Разработка модуля кеширования 1С-Битрикс на Redis

Разработка модуля кеширования 1С-Битрикс на Redis — решение для проектов, где стандартный файловый кеш не справляется. Сайт тормозит, администраторы чистят папку `/bitrix/cache/` вручную, а при пиковых нагрузках сервер ложится. Однажды на проекте с каталогом на 500 000 товаров файловый кеш разросся
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка модуля кеширования 1С-Битрикс на Redis
Средний
~1-2 недели

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

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    995
  • 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 Appointment Booking Widget for a Medical Center
    734
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    863
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    772
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1134

Разработка модуля кеширования 1С-Битрикс на Redis — решение для проектов, где стандартный файловый кеш не справляется. Сайт тормозит, администраторы чистят папку /bitrix/cache/ вручную, а при пиковых нагрузках сервер ложится. Однажды на проекте с каталогом на 500 000 товаров файловый кеш разросся до 40 ГБ, и операции чтения блокировали базу данных. Модуль кеширования на Redis решил эти проблемы полностью: Redis-бэкенд обеспечивает hit rate 98%, снижает latency на 90% и поддерживает атомарную инвалидацию тегов. Свяжитесь с нами — мы бесплатно проанализируем архитектуру вашего проекта и предложим оптимальное решение под ключ.

Почему Redis быстрее файлового кеша?

Файловый кеш не масштабируется на несколько серверов, операции чтения/записи блокируются на уровне файловой системы, а инвалидация по тегу — блокирующая операция. Redis выполняет запросы в памяти, время отклика на 90% меньше. Атомарные операции (Sets, Lists) делают инвалидацию мгновенной. На практике hit rate модуля на Redis достигает 98%, тогда как на файлах он редко превышает 85%. Нагрузочное тестирование показало: при 1000 одновременных запросах Redis-бэкенд обрабатывает все запросы за 120 мс, а файловый — за 450 мс.

Архитектура CacheManager

Центральный класс CacheManager реализует паттерн стратегии. Бэкенд выбирается в настройках модуля:

$cache = \Vendor\Cache\CacheManager::getInstance(); // Стандартный get-or-set $result = $cache->remember('catalog_section_12', 3600, function() { return CIBlockSection::GetList(/* ... */)->Fetch(); }, ['iblock_12', 'catalog']); // → Данные из кеша или результат callable, если промах // Явная инвалидация по тегу $cache->invalidateTag('iblock_12'); // → Сбрасываются все ключи, помеченные тегом iblock_12 

Redis-бэкенд: инвалидация тегов на атомарном уровне

Теги в Redis реализованы через Sets. Инвалидация по тегу — атомарная операция без блокировок файловой системы:

class RedisCacheBackend implements CacheBackendInterface { private \Redis $redis; public function get(string $key): mixed { $data = $this->redis->get($key); return $data !== false ? unserialize($data) : null; } public function set(string $key, mixed $value, int $ttl, array $tags = []): void { $serialized = serialize($value); $this->redis->setEx($key, $ttl, $serialized); // Теги хранятся как Redis Sets foreach ($tags as $tag) { $this->redis->sAdd("tag:{$tag}", $key); $this->redis->expire("tag:{$tag}", $ttl + 3600); } } public function invalidateTag(string $tag): void { $keys = $this->redis->sMembers("tag:{$tag}"); if ($keys) { $this->redis->del(...$keys); } $this->redis->del("tag:{$tag}"); } } 

Четыре стратегии кеширования

Мы используем четыре стратегии в зависимости от типа данных:

  • TTL-кеш — классическое время жизни для редко меняющихся данных: настройки сайта, регионы, доставка
  • Event-invalidation — сброс при событиях Битрикс (OnAfterIBlockElementAdd, OnAfterIBlockElementUpdate и т.д.)
  • Stale-while-revalidate — устаревший кеш отдаётся немедленно, в фоне запускается перегенерация через агент. Устраняет «толпу» при промахе
  • Request-scoped — in-memory array на время одного HTTP-запроса, позволяет избежать повторных запросов к БД

Хотите подобрать оптимальную стратегию для вашего проекта? Свяжитесь с нами для консультации.

Прогрев кеша для предотвращения spike

При сбросе кеша первый запрос всегда медленный — идёт в БД. При высокой нагрузке это приводит к spike. Агент прогрева решает проблему:

// Зарегистрированные warmup-задачи $cache->registerWarmup('catalog_menu', function() { return CIBlockElement::GetList(/* полный каталог */); }, ['iblock_main_catalog'], 7200); // Агент запускается раз в час и обновляет кеш до истечения TTL \Vendor\Cache\WarmupAgent::run(); 

Мониторинг и статистика

Таблица b_vendor_cache_stat — для агрегированной статистики по ключам:

  • key_prefix, hits, misses, avg_ttl, last_hit_at

В административном интерфейсе:

  • Hit rate по категориям ключей
  • Топ «холодных» ключей (более 20% промахов)
  • Размер кеша по бэкендам
  • Ручная инвалидация по тегу или ключу
  • Лог последних операций инвалидации

Как интегрировать модуль с существующими компонентами?

Стандартные компоненты используют $APPLICATION->IncludeComponent() с параметром CACHE_TYPE. Модуль перехватывает этот механизм и перенаправляет в Redis:

// В init.php после подключения модуля \Vendor\Cache\BitrixCacheBridge::install(); // → Переопределяет \Bitrix\Main\Data\Cache::createInstance() // возвращая Redis-бэкенд вместо файлового 

Bridge делает замену прозрачной — компоненты продолжают работать без изменений кода.

Процесс разработки: от аудита до деплоя

  1. Аналитика — изучаем текущую архитектуру, замеряем производительность (XDebug, slow log MySQL), выявляем узкие места.
  2. Проектирование — проектируем схему модуля: выбираем стратегии, проектируем структуру тегов, согласовываем с вами.
  3. Реализация — пишем код CacheManager, бэкендов, агентов, bridge.
  4. Тестирование — нагрузочное тестирование с помощью JMeter (1000 виртуальных пользователей) и снятие метрик.
  5. Деплой — установка на staging и production, мониторинг в течение недели.

Что входит в работу

Деливерабли Описание
Архитектура Схема взаимодействия модуля с ядром Битрикс
Реализация Код CacheManager, бэкендов, стратегий, агентов
Интеграция BitrixCacheBridge для компонентов
Тестирование Load-testing с отчётом (hit rate, latency)
Документация PHPdoc, README, инструкция по эксплуатации
Поддержка 1 месяц бесплатной поддержки после сдачи

Сроки и стоимость

Этап Срок
Архитектура CacheManager, интерфейс бэкенда 1 день
Redis-бэкенд с поддержкой тегов 2 дня
Стратегии: stale-while-revalidate, request-scoped 2 дня
Агент прогрева кеша 1 день
Bridge для стандартных компонентов Битрикс 1 день
Статистика, административный интерфейс 2 дня
Тестирование под нагрузкой 1 день
Настройка Redis Cluster / Sentinel (опционально) 1–2 дня

Итого: 10–12 рабочих дней. Гарантия на код — 1 год. Стоимость разработки рассчитывается индивидуально. Для проектов с кластером PHP-серверов — дополнительная настройка Redis Cluster или Sentinel: +1–2 дня.

Подробнее о Redis и принципах кеширования.

Оцените текущую производительность вашего сайта: мы проведём бесплатный аудит кеширования за 2 дня. Закажите разработку модуля кеширования, чтобы ваш сайт работал быстро и стабильно при любых нагрузках — свяжитесь с нами для консультации!