Загрузка страницы..
Кеширование данных в 1С-Битрикс D7
Аналогом CPHPCache в D7 является класс \Bitrix\Main\Data\Cache
2018-02-21T13:02 21 февр. 2018 13:02
Просмотров: 782

Простой кеш

Аналогом CPHPCache в D7 является класс \Bitrix\Main\Data\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 $b

aseDir (default: "cache") Базовая директория кеша. По умолчанию равен cache * @return bool true, если кеш валидный */ public function initCache($TTL, $uniqueString, $initDir = false, $baseDir = "cache")

Управляемый кеш

Также в D7 появился удобный доступ к управляемому кешу, объект для управления кешем можно получить из объекта приложения:

$cache = \Bitrix\Main\Application::getInstance()->getManagedCache();

$cache является объектом \Bitrix\Main\Data\ManagedCache.

Пример использования:

if ($cache->read($cacheTtl, $cacheId)) {
    $vars = $cache->get($cacheId); // достаем переменные из кеша
} else {
    // некоторые действия...
    $cache->set($cacheId, array("key" => $value)); // записываем в кеш
}

Для принудительной очистки кеша по ключу используем:

$cache->clean($cacheId);

Кеширование выборок из БД

В версии 16.5.9 в ORM появилось кеширование выборок из базы данных:

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();


Комментарии: 0

Коментарий пока нет, стань первым!

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

Яндекс.Метрика Яндекс.Метрик