Кеширование
26.04.2015
В битриксе реализована мощная система кеширования с поддержкой тегов. Тут официальная документация. А я приведу краткое описание с примерами.
Как работает автокеширование в стандартных компонентах?
При получении элементов или разделов (методы 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();//а так можно очистить вообще весь кеш
Оставить комментарий: