Для кеширования в 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); }
Добавить комментарий