Загрузка...

Bitrix D7. Кеширование

Описание функций кеширования в Bitrix D7
Bitrix - Битрикс

Документация по кешированию.

Простой кеш. Неуправляемое кеширование.

Результаты кеширования сохраняются в виде файлов в каталоге /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();

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *