Управляемый кэш (managed cache) в Битрикс — это кэш с тегами, который позволяет сбрасывать только нужные данные при изменении контента. Без него приходится либо не кэшировать вообще, либо сбрасывать всё подряд.
Как работает управляемый кэш
Обычный кэш хранит данные по ключу и живёт заданное время. Управляемый кэш добавляет теги — метки, по которым можно сбросить группу записей.
Битрикс автоматически тегирует кэш компонентов: при изменении элемента инфоблока сбрасывается кэш всех компонентов, связанных с этим инфоблоком.
Сохранение данных с тегами
$cache = \Bitrix\Main\Application::getInstance()->getCache();
$tagCache = \Bitrix\Main\Application::getInstance()->getTaggedCache();
$cacheId = 'product_list_' . $categoryId;
$cacheDir = '/product/list/';
$ttl = 3600; // 1 час
if ($cache->initCache($ttl, $cacheId, $cacheDir)) {
// Данные из кэша
$data = $cache->getVars();
} elseif ($cache->startDataCache()) {
// Загружаем из базы
$data = fetchProductsFromDb($categoryId);
// Регистрируем теги
$tagCache->startTagCache($cacheDir);
$tagCache->registerTag('iblock_id_5'); // инфоблок 5
$tagCache->endTagCache();
$cache->endDataCache($data);
}
Ручной сброс кэша по тегу
// Сбросить всё что связано с инфоблоком 5
\Bitrix\Main\Application::getInstance()
->getTaggedCache()
->clearByTag('iblock_id_5');
// Сбросить конкретный элемент
\Bitrix\Main\Application::getInstance()
->getTaggedCache()
->clearByTag('iblock_element_id_123');
Стандартные теги инфоблоков
Битрикс автоматически регистрирует эти теги при изменении данных:
| Тег | Когда сбрасывается |
|---|---|
iblock_id_N |
Любое изменение в инфоблоке N |
iblock_element_id_N |
Изменение элемента N |
iblock_section_id_N |
Изменение раздела N |
USER_GROUPS |
Изменение групп пользователей |
Кэш в компонентах
В шаблоне компонента используйте стандартный механизм:
// component.php
if ($this->startResultCache($ttl, $additionalCacheId)) {
// Выборка данных
$this->arResult['ITEMS'] = fetchItems();
// Регистрируем тег
$this->setResultCacheKeys(['ITEMS']);
// Добавляем тег инфоблока
$tagCache = \Bitrix\Main\Application::getInstance()->getTaggedCache();
$tagCache->registerTag('iblock_id_' . $iblockId);
$this->endResultCache();
}
Где хранится кэш
По умолчанию в файловой системе: /bitrix/cache/. Для production настоятельно рекомендуется Redis:
// /bitrix/.settings.php
'cache' => [
'value' => [
'type' => 'memcache', // или redis
'memcache' => [
'host' => '127.0.0.1',
'port' => 11211,
],
],
],
Диагностика: кэш не сбрасывается
- Проверьте что тег совпадает при записи и при сбросе
- Убедитесь что
tagCache->startTagCache()иendTagCache()вызываются в паре - Проверьте директорию кэша — она должна совпадать
- Временно добавьте
$cache->cleanDir($cacheDir)для принудительной очистки
Итог
Управляемый кэш — обязательный инструмент для любого нагруженного Битрикс-проекта. Правило простое: всегда регистрируйте теги инфоблоков при кэшировании данных из них — тогда сброс будет происходить автоматически при редактировании контента.
