Простой кеш. Неуправляемое кеширование.
Результаты кеширования сохраняются в виде файлов в каталоге /bitrix/cache/. Если время кеширования не истекло, то вместо ресурсоемкого кода будет подключен предварительно созданный файл кеша. Кеширование называется неуправляемым, поскольку кеш не перестраивается автоматически после модификации исходных данных, а действует указанное время после создания, которое задается в диалоге Параметры компонента.
use \Bitrix\Main\Data\Cache; $cache = Cache::createInstance(); // получаем экземпляр класса if ($cache->initCache(7200, "cache_key")) { // проверяем кеш и задаём настройки $vars = $cache->getVars(); // достаем переменные из кеша } elseif ($cache->startDataCache()) { // некоторые действия... $cache->endDataCache(array("key" => "value")); // записываем в кеш }
Описание параметров метода initCache:
/** * @access public * @param mixed $TTL Время жизни кеша в секундах. * @param mixed $uniqueString Уникальный идентификатор кеша. * @param bool $initDir (default: false) Папка, в которой хранится кеш, относительно /bitrix/cache/ * @param string $baseDir (default: "cache") Базовая директория кеша. По умолчанию равен cache * @return bool true, если кеш валидный */ public function initCache($TTL, $uniqueString, $initDir = false, $baseDir = "cache")
Если необходимо чтобы часть кеша была управляемым, часть – неуправляемым, то следует кастомизировать необходимые для неуправляемого кеширования компоненты.
Управляемый кеш
Технология управляемого кеширования или тегированный кеш (Сache Dependencies) автоматически обновляет кеш компонентов при изменении данных.
Технология Сache Dependencies, как и весь продукт, может хранить кеш как в файлах, так и используя Memcached.
Для часто обновляемого большого массива данных использование тегированного кеша неоправданно, лучше использовать неуправляемое кеширование.
$cache = \Bitrix\Main\Application::getInstance()->getManagedCache(); if ($cache->read($cacheTtl, $cacheId)) { $vars = $cache->get($cacheId); // достаем переменные из кеша } else { // некоторые действия... $cache->set($cacheId, array("key" => $value)); // записываем в кеш }
Для принудительной очистки кеша по ключу используем:
$cache->clean($cacheId);
Кеширование выборок из БД
v16.5.9 (beta) 2016-10-20 Разработчикам: в ORM добавлено управляемое кеширование выборок (ключ “cache” в параметрах getList()).
Чтобы закешировать результат getList нужно задать ключ cache. Например, при получении элементов инфоблока:
$query = \Bitrix\Iblock\ElementTable::getList(array(
'select' => array('ID', 'NAME', 'XML_ID'),
'filter' => array('IBLOCK_ID' => 1),
'cache' => array(
'ttl' => 60,
'cache_joins' => true,
)
));
$result = $query->fetch();
Параметров ttl задаётся время жизни кеша, а cache_joins задаёт необходимость кеширования при наличии джойнов. Внутри используется управляемое кеширование. Кеш пишется в папку /bitrix/managed_cache/MYSQL/orm_%имя_таблицы_сущности_orm%/
с ключом md5(%sql-запрос%)
.
В настройках CMS (/bitrix/.settings.php) можно задать глобальный диапазон ttl для отдельных таблиц с помощью настройки cache_flags:
...
'cache_flags' => array(
'value'=> array(
"b_iblock_element_min_ttl" => 60,
"b_iblock_element_max_ttl" => 86400,
)
),
...
Для того, чтобы очистить кеш выборок сущности, нужно вызвать метод cleanCache. Например, для элементов инфоблока:
\Bitrix\Iblock\ElementTable::getEntity()->cleanCache();