Найти в Дзене
Программист - турист

Bitrix Как правильно чистить кэш (общий, управляемый, композитный)

В Битрикс три основных слоя кэша: общий (кэш компонентов в /bitrix/cache), управляемый/тегированный (логика «по тегам» в /bitrix/managed_cache) и композитный HTML (целые страницы в /bitrix/html_pages). Чистим их по разным поводам и разными способами: через публичную панель «Очистить кэш», через админку «Настройки → Инструменты → Очистка файлов кэша», точечно — программно (очистка по тегу), радикально — удалением содержимого соответствующих папок. Начинайте с точечной очистки, избегайте «убить всё» в пиковые часы, после — прогрейте ключевые страницы. ⚠️ Не удаляйте служебные файлы композита (например, конфиги в /bitrix/html_pages). Если сомневаетесь — чистите через интерфейс. На любой странице в режиме правки: Плюсы: быстро и безопасно. Минус: не всегда даёт тонкий контроль по сущностям. Плюсы: UI, логи. Минусы: всё ещё «грубо» по сравнению с тэгами. Очистка по тегу — золотой стандарт для управляемого кэша: use Bitrix\Main\Application;
// где-то в коде после изменения данных
$taggedCac
Оглавление

В Битрикс три основных слоя кэша: общий (кэш компонентов в /bitrix/cache), управляемый/тегированный (логика «по тегам» в /bitrix/managed_cache) и композитный HTML (целые страницы в /bitrix/html_pages). Чистим их по разным поводам и разными способами: через публичную панель «Очистить кэш», через админку «Настройки → Инструменты → Очистка файлов кэша», точечно — программно (очистка по тегу), радикально — удалением содержимого соответствующих папок. Начинайте с точечной очистки, избегайте «убить всё» в пиковые часы, после — прогрейте ключевые страницы.

Зачем вообще три кэша

  1. Общий (кэш компонентов)
    Сохраняет результат работы компонентов (списки, меню, баннеры). Ускоряет сборку страницы и уменьшает обращения к базе.
  2. Управляемый (тегированный) кэш
    Хранит данные, завязанные на сущности (например, инфоблоки) и умеет
    инвалидироваться по тегам — при изменении элемента помеченные куски кэша сбрасываются автоматически.
  3. Композитный HTML-кэш
    Готовые HTML-снимки целых страниц. Отдаётся очень быстро, работает поверх остальных уровней. Динамика вставляется через композитные области.

Где живёт кэш на диске

  • /bitrix/cache/… — общий кэш компонентов.
  • /bitrix/managed_cache/… — управляемый (тегированный) кэш.
  • /bitrix/html_pages/… — композитный HTML-кэш страниц.
  • Дополнительно: /upload/resize_cache/… — кэш ресайза изображений.
⚠️ Не удаляйте служебные файлы композита (например, конфиги в /bitrix/html_pages). Если сомневаетесь — чистите через интерфейс.

Когда какой кэш чистить

  • Поменяли шаблон компонента/меню/верстку блока → сначала общий кэш (и/или кэш меню).
  • Добавили/переименовали поля, свойства, меняли выборки → чаще всего управляемый кэш (по тегу или целиком).
  • После деплоя/обновления модулей, «почему изменения всё равно не видно?» → общий + управляемый; если страница на композите — ещё и композитный.
  • Правили только контент (элементы инфоблока) → обычно ничего чистить не нужно: теги сами инвалидируют нужное.

Способы очистки (от безопасного к радикальному)

Через публичную панель (самый быстрый для редакторов)

На любой странице в режиме правки:

  • Ещё → Очистить кэш → «Только этой страницы» / «Кэш компонентов» / «Кэш меню» / «Весь кэш сайта».
  • Для композита: Композитный сайт → Очистить HTML-кэш (или «Сбросить кэш текущей страницы»).

Плюсы: быстро и безопасно. Минус: не всегда даёт тонкий контроль по сущностям.

Через админку (контролируемо и привычно)

  • Настройки → Инструменты → Очистка файлов кэша — общий/управляемый целиком или для нужного сайта.
  • Настройки → Производительность → Композитный сайт — «Очистить HTML-кэш».
  • Контент → Меню — можно сбросить кэш меню, если рассинхрон.

Плюсы: UI, логи. Минусы: всё ещё «грубо» по сравнению с тэгами.

Программно (точечно и правильно)

Очистка по тегу — золотой стандарт для управляемого кэша:

use Bitrix\Main\Application;

// где-то в коде после изменения данных
$taggedCache = Application::getInstance()->getTaggedCache();
$taggedCache->clearByTag('iblock_id_7'); // сбросить всё, что помечено тегом инфоблока 7
$taggedCache->clearByTag('section_42'); // ваш кастомный тег
Старый вариант через глобальный менеджер (в проектах до D7):
global $CACHE_MANAGER;
$CACHE_MANAGER->ClearByTag('iblock_id_7');

Очистка каталога кэша компонента (общий кэш):

use Bitrix\Main\Data\Cache;

$cache = Cache::createInstance();
// чистим весь подкаталог кэша компонента
$cache->cleanDir('my_component', 'my_init_dir');

// или точечно по ключу
$cache->clean('key', 'my_component', 'my_init_dir');

Рекомендация: при разработке всегда помечайте кэшируемые блоки тегами по сущностям, которые на них влияют (например, iblock_id_X, element_Y, section_Z). Тогда точечная очистка после изменений станет тривиальной.

Файловой системой/CLI (радикально и шустро для DevOps)

Если нужно «снести всё», а к интерфейсу не попасть:

# ВНИМАНИЕ: путь до DOCUMENT_ROOT вашего проекта!
rm -rf /var/www/site/bitrix/cache/*
rm -rf /var/www/site/bitrix/managed_cache/*
rm -rf /var/www/site/upload/resize_cache/*

# Композитный HTML-кэш
rm -rf /var/www/site/bitrix/html_pages/*

# (опционально) Очистка PHP OPcache — если у вас включен
# перезапустите PHP-FPM или выполните opcache:reset из консоли/статуса

Плюсы: быстро, надёжно. Минусы: бездумная очистка может «заморозить» сайт на пару минут под прогрев — делайте вне пиков.

Пример: точечная очистка после обновления товара

use Bitrix\Main\Application;

function onProductUpdate(int $productId, int $iblockId): void
{
// 1) Сносим связанные куски через теги
$tagged = Application::getInstance()->getTaggedCache();
$tagged->clearByTag('iblock_id_' . $iblockId);
$tagged->clearByTag('element_' . $productId);

// 2) (опционально) Чистим каталог кеша нашего виджета «Похожие товары»
$cache = \Bitrix\Main\Data\Cache::create