Тегированный кэш — механизм, который сбрасывает только те кэши, что связаны с изменёнными данными, а не весь кэш сайта. Это позволяет держать высокое время жизни кэша без риска показать посетителю устаревший контент.
main). Опция становится доступной, когда включено кэширование управляемых компонентов.Что такое тегированный кэш и зачем он нужен
Обычный кэш компонента сбрасывается по истечении времени жизни кэша (TTL) — например, раз в 36000 секунд. Пока TTL не истёк, изменения в данных на странице не появляются. Чтобы контент обновлялся быстрее, приходится уменьшать время жизни кэша, но это увеличивает нагрузку на сервер.
Тегированный кэш решает эту дилемму. Каждый кэш компонента помечается тегами — метками сущностей, из которых он собран (например, элемент инфоблока, раздел, привязка к типу инфоблока). Когда данные меняются, платформа сбрасывает только те кэши, у которых есть соответствующий тег, а не весь кэш сайта.
Практический эффект: можно задать большое время жизни кэша (сутки и более), а актуальность будет обеспечиваться сбросом по тегам при каждом изменении данных в админке или через API.
- Изменили цену товара — сбросился кэш карточки и списков, где он выводится;
- Добавили новость — сбросился кэш ленты новостей, но не каталога;
- Правили статичную страницу — кэш каталога вообще не тронут.
Условия работы: что должно быть включено
Тегированный кэш опирается на подсистему кэширования управляемых компонентов. Чтобы он работал, должны выполняться несколько условий.
- Включено кэширование компонентов (управляемый кэш) в настройках модуля
main; - Компоненты на страницах используют кэширование и корректно регистрируют теги (штатные компоненты 1С-Битрикс это делают автоматически);
- Настроено хранилище кэша, поддерживающее теги — файловая система,
memcachedили Redis через модульcluster.
Важно про хранилище. Не все бэкенды одинаково хорошо работают с тегами. Чистый memcached не хранит списки тегов в БД, поэтому Битрикс ведёт их в отдельной таблице b_cache_tag. При очень большом числе тегов это создаёт нагрузку на базу. Для крупных проектов теги обычно выносят в Redis или используют комбинированное хранилище.
Включение и настройка в админке
Пошагово включаем тегированный кэш.
- Откройте Настройки → Настройки продукта → Автокэширование.
- Убедитесь, что автокэширование включено (кнопка «Включить автокэширование», либо оно уже активно).
- Перейдите на вкладку Тегированный кэш.
- Установите флажок «Включить тегированный кэш».
- При необходимости включите «Отслеживать изменения инфоблоков» — это добавляет автоматическую регистрацию тегов при работе с элементами инфоблоков.
- Сохраните настройки.
После включения увеличьте время жизни кэша у компонентов (в настройках компонента, параметр «Время кэширования (сек.)») — например, до 86400. Теперь актуальность обеспечивается сбросом по тегам, а не коротким TTL.
Проверить, что механизм включён на уровне ядра, можно по константе в bitrix/.settings.php — секция cache. Также включённость отражается в b_option модуля main (параметры вида tags_cache).
Как происходит автоматический сброс
Автоматический сброс — основной сценарий работы. Он происходит при изменении данных без участия администратора.
- При сохранении элемента или раздела инфоблока платформа вызывает сброс кэшей с соответствующими тегами;
- Теги формируются на основе идентификаторов: тип инфоблока, инфоблок, конкретный элемент;
- Штатные компоненты (
news.list,catalog.section,catalog.elementи др.) регистрируют теги через методы кэш-менеджера автоматически.
В собственном коде теги регистрируют так: внутри кэшируемого блока получают тег-менеджер и добавляют тег через методы $obCache / CBitrixComponent::getTaggedCache(). Пример регистрации тега:
$taggedCache = \Bitrix\Main\Application::getInstance()->getTaggedCache();
$taggedCache->registerTag('iblock_id_5');
Сброс по тегу выполняется вызовом $taggedCache->clearByTag('iblock_id_5');. Штатное ядро делает это за вас при событиях изменения инфоблоков, если включено отслеживание.
Ручной сброс тегированного кэша
Иногда нужно сбросить кэш принудительно — например, после массового импорта или прямого изменения данных в БД в обход API. Способы ниже упорядочены от щадящих к радикальным.
| Способ | Где | Что сбрасывает |
|---|---|---|
| Пересохранить элемент | Админка, форма редактирования | Кэши по тегам этого элемента |
| Сброс по тегу через API | clearByTag() | Кэши с указанным тегом |
| Очистить файлы кэша | Настройки → Автокэширование → «Очистить файлы кэша» | Весь кэш сайта |
| Удаление каталога | bitrix/cache/ и bitrix/managed_cache/ | Весь кэш, включая теги |
Кнопка «Очистить файлы кэша» на странице автокэширования сбрасывает весь управляемый кэш вместе с тегами — это самый простой способ гарантированно обновить сайт. Более точечные способы (пересохранение, clearByTag) предпочтительнее, потому что не сбрасывают весь кэш и не создают всплеск нагрузки.
Для сброса из скрипта или консоли используйте \Bitrix\Main\Application::getInstance()->getTaggedCache()->clearByTag('имя_тега');. Полностью очистить управляемый кэш можно через BXClearCache(true).
Частые ошибки
Типичные проблемы, из-за которых тегированный кэш «не работает» или создаёт нагрузку.
- Изменения не появляются на сайте. Данные меняли в обход API (SQL напрямую, сторонний импорт без событий) — теги не сбрасываются. Решение: сохранять через API инфоблоков или вызывать
clearByTag()вручную после импорта. - Тегированный кэш включён, но кэш сбрасывается весь сразу. Часто из-за нестандартных компонентов, которые регистрируют слишком общий тег (например, тег всего инфоблока на каждой странице). Проверьте регистрацию тегов в кастомных шаблонах.
- Рост таблицы
b_cache_tagи нагрузка на БД. Возникает наmemcached-хранилище при большом числе тегов. Решение: вынести теги в Redis или пересмотреть гранулярность тегов. - Забыли увеличить время жизни кэша. Тегированный кэш включён, но TTL компонентов остался маленьким — выигрыша в производительности нет. Поднимите время кэширования компонентов.
- Кэш не пишется вообще. Отключено автокэширование или нет прав на запись в
bitrix/managed_cache/. Проверьте включённость автокэширования и права на каталоги.
Проверка, что механизм работает
Как убедиться, что тегированный кэш действительно применяется.
- Откройте страницу со списком инфоблока при включённом кэшировании — компонент закэшируется.
- В админке измените один из выводимых элементов и сохраните.
- Обновите публичную страницу — изменение должно появиться сразу, без ожидания истечения TTL.
- Проверьте, что при этом кэш других разделов не сбросился (косвенно — по отметкам времени файлов в
bitrix/managed_cache/).
Дополнительно оценить эффект помогает Монитор производительности и статистика попаданий в кэш: доля обслуженных из кэша хитов должна оставаться высокой даже при частых правках контента.
Итог
Тегированный кэш позволяет держать большое время жизни кэша и при этом показывать актуальные данные: платформа сбрасывает только связанные с изменением кэши, а не весь сайт.
- Включается в Настройки → Автокэширование → Тегированный кэш поверх включённого автокэширования;
- Сбрасывается автоматически при изменении данных через API и вручную — пересохранением,
clearByTag()или очисткой кэша; - Требует внимания к хранилищу тегов и корректной регистрации тегов в кастомных компонентах.
Правильно настроенный тегированный кэш — один из самых заметных по эффекту способов ускорить сайт на 1С-Битрикс без потери актуальности контента.