Идеально для кеширования HTML-фрагментов или данных, которые редко меняются.
use CPHPCache; // Данные для кеширования $pageUrl = '/blog/post-1/'; $cacheId = 'opengraph_meta_' . md5($pageUrl); // Уникальный ID кеша $cacheDir = '/dev2fun/opengraph/'; // Папка в /bitrix/cache/ $cacheTime = 3600; // Время жизни (1 час) $cache = new CPHPCache(); if ($cache->InitCache($cacheTime, $cacheId, $cacheDir)) { // Данные есть в кеше $metaData = $cache->GetVars(); } elseif ($cache->StartDataCache()) { // Генерация данных $metaData = [ 'title' => 'Заголовок для соцсетей', 'image' => '/upload/og_image.jpg', ]; // Сохраняем в кеш $cache->EndDataCache($metaData); } // Использование: echo $metaData['title'];
Оптимален для частого обращения к данным в рамках одного запроса.
use Bitrix\Main\Data\ManagedCache; $managedCache = new ManagedCache(); $cacheKey = 'opengraph_settings'; // Уникальный ключ $cacheTime = 86400; // 24 часа // Проверяем кеш if ($managedCache->read($cacheTime, $cacheKey)) { $settings = $managedCache->get($cacheKey); } else { // Генерация данных $settings = [ 'default_title' => \Bitrix\Main\Config\Option::get('dev2fun.opengraph', 'default_title'), 'default_image' => \Bitrix\Main\Config\Option::get('dev2fun.opengraph', 'default_image'), ]; // Сохраняем в кеш $managedCache->set($cacheKey, $settings); } // Использование: echo $settings['default_title'];
Полезен, когда нужно сбросить кеш для группы связанных данных.
use Bitrix\Main\Data\Cache; $elementId = 123; $cache = Cache::createInstance(); $cacheTime = 3600; $cacheId = 'opengraph_element_' . $elementId; $cacheDir = '/dev2fun/opengraph/elements/'; $tags = ['opengraph_element_' . $elementId]; // Теги для сброса // Пытаемся получить данные из кеша if ($cache->initCache($cacheTime, $cacheId, $cacheDir)) { $ogData = $cache->getVars(); } elseif ($cache->startDataCache()) { // Генерация данных $ogData = [ 'title' => 'Заголовок элемента ' . $elementId, 'image' => '/upload/elements/' . $elementId . '.jpg', ]; // Устанавливаем теги для кеша $cache->tag($tags); $cache->endDataCache($ogData); } // Сброс кеша по тегу при изменении элемента $eventManager = \Bitrix\Main\EventManager::getInstance(); $eventManager->addEventHandler('iblock', 'OnAfterIBlockElementUpdate', function($elementId) { $cache = Cache::createInstance(); $cache->clean('opengraph_element_' . $elementId, '/dev2fun/opengraph/elements/'); });
use Bitrix\Main\Data\ManagedCache; $managedCache = new ManagedCache(); $cacheKey = 'opengraph_rules'; $cacheTags = ['opengraph_global']; // Общий тег для всех правил // Чтение кеша if ($managedCache->read(3600, $cacheKey, $cacheTags)) { $rules = $managedCache->get($cacheKey); } else { $rules = OpenGraphTable::getList([ 'filter' => ['ACTIVE' => 'Y'], 'cache' => ['ttl' => 3600], ])->fetchAll(); $managedCache->set($cacheKey, $rules, $cacheTags); } // Сброс всего кеша с тегом 'opengraph_global' при изменении настроек \Bitrix\Main\Config\Option::set('dev2fun.opengraph', 'some_setting', 'new_value'); $managedCache->cleanByTag('opengraph_global');
Тип кеша | Сценарий применения |
---|---|
Файловый | Кеширование HTML-блоков, статичных данных. |
ManagedCache | Частый доступ к данным в рамках одного запроса (в памяти). |
Тегированный | Связанные данные, которые нужно сбрасывать группами. |
Важные нюансы:
1. Очистка кеша:
// Файловый кеш (new CPHPCache())->CleanDir('/dev2fun/opengraph/'); // ManagedCache (new ManagedCache())->cleanAll(); // По тегу Cache::clearTag('opengraph_global');
- `0` — кеш хранится до явного сброса.
- `3600` — обновляется каждые 2 часа.
3. Кеширование в компонентах:
В параметрах компонента укажите:
'CACHE_TIME' => 3600, 'CACHE_GROUPS' => 'N', // Игнорировать группы пользователей 'CACHE_TYPE' => 'A', // Авторежим (учитывает TTL)