Для кеширования в 1С-Битрикс есть новый класс Bitrix\Main\Data\Cache почти ничем не отличается в обращении от старого CPHPCache .
Пример старого API:
$cache = new \CPHPCache();
if ($cache->InitCache($cacheTime, $cacheId, $cacheDir))
{
$result = $cache->GetVars();
}
elseif($cache->StartDataCache())
{
$result = array();
// ...
if ($isInvalid)
{
$cache->AbortDataCache();
}
// ...
$cache->EndDataCache($result);
}
Пример API D7:
$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->initCache($cacheTime, $cacheId, $cacheDir))
{
$result = $cache->getVars();
}
elseif ($cache->startDataCache())
{
$result = array();
// ...
if ($isInvalid)
{
$cache->abortDataCache();
}
// ...
$cache->endDataCache($result);
}
Пример тегированного кеша на D7:
$cacheManager = \Bitrix\Main\Application::getInstance()->getTaggedCache();
$cacheManager->startTagCache('/path_cache');
$cacheManager->registerTag('tag');
$cacheManager->endTagCache();
//Очистить по тегу
//$cacheManager->clearByTag('tag');
Пример кеша с тегированием
$iblockId = (int)IBLOCK_PRODUCTS;
$cache = \Bitrix\Main\Data\Cache::createInstance();
$cacheDir = '/' . SITE_ID . '/iblock/' . $iblockId;
if ($cache->initCache(36000, 'sections', $cacheDir)) {
$sections = $cache->getVars();
} elseif ($cache->startDataCache()) {
$cacheManager = \Bitrix\Main\Application::getInstance()->getTaggedCache();
$cacheManager->startTagCache($cacheDir);
$cacheManager->registerTag('iblock_id_' . $iblockId);
$res = CIBlockSection::GetList(
['SORT' => 'ASC', 'NAME' => 'DESC'],
['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y', 'DEPTH_LEVEL' => 1],
false,
[
'ID',
'IBLOCK_ID',
'NAME',
'SORT',
'IBLOCK_SECTION_ID',
'SECTION_PAGE_URL',
'UF_FOOTER_MENU'
]
);
while ($item = $res->GetNext()) {
$sections[$item['ID']] = $item;
}
if (!$sections) {
$cache->abortDataCache();
$cacheManager->abortTagCache();
}
$cacheManager->endTagCache();
$cache->endDataCache($sections);
}
Комментарии 1