Кеширование

В битриксе реализована мощная система кеширования с поддержкой тегов. Тут официальная документация. А я приведу краткое описание с примерами.

Как работает автокеширование в стандартных компонентах?

При получении элементов или разделов (методы Fetch/GetNext) кешу компонента добавляется тег iblock_id_[IBLOCK_ID], для инфоблока с id 2, тег будет iblock_id_2. При изменении разделов или элементов (методы Add/Update/Delete) сбрасывается кеш для всего инфоблока.

Нужно помнить

Кеш не сбрасывается при обновлении свойств методами api типа SetPropertyValuesEx.

Ручное использование

Какие то свои сложные расчеты можно кешировать с помощью стандартного механизма, например:


$obCache = new CPHPCache();
$cacheLifetime = 36000000;//Время жизни кеша
$cacheID = 'myCache';//уникальный ключ кеша
$cachePath = '/myCache';//Подраздел для хранения кеша
if ($obCache->startDataCache($cacheLifetime, $cacheID, $cachePath)) {
    //Кеша нет
    //Выполняем расчеты
    $arRes = array(
        '2*2' => 2*2;
    );
    //Добавим теги нашему кешу
    $GLOBALS['CACHE_MANAGER']->StartTagCache($cachePath);
    $GLOBALS['CACHE_MANAGER']->RegisterTag('iblock_id_5');//Кеш будет зависить от изменений инфоблока 5
    $GLOBALS['CACHE_MANAGER']->RegisterTag('myTag');//Наш собственный тег
    $GLOBALS['CACHE_MANAGER']->RegisterTag('iblock_id_new'); //Кеш зависит от добавления нового инфоблока (это стандартный тег)
    $GLOBALS['CACHE_MANAGER']->EndTagCache();
    $obCache->EndDataCache($arRes);
} else {
    //Получаем данные из кеша
    $arRes = $obCache->GetVars();
}

Очистка кеша

Кеш по определенному тегу можно очистить так:


$GLOBALS['CACHE_MANAGER']->ClearByTag("iblock_id_5");

также можно очистить кеш по подразделу хранения:


$obCache = new CPHPCache();
$obCache->CleanDir('/myCache');//Очищаем наш кеш
$obCache->CleanDir();//а так можно очистить вообще весь кеш

Оставить комментарий:

Представьтесь пожалуйста:
Электронная почта:
Электронный адрес не публикуются
Текст сообщения:
Для подсветки кода, оборачивайте ваш код в теги <code></code>
Введите 5 цифр с картинки:

Рекомендую:

Поддержать проект:

бесполезная кнопка, которую еще никто не нажал:)
Нажали! Кнопку нажали уже 7 человек!!! Спасибо, очень мотивирует!