Кеширование запросов ORM
Кеширование выборки позволяет сохранять результаты запросов для повторного использования. По умолчанию кеширование отключено.
Для включения кеширования используйте ключ cache
в методе getList
:
$res = \Bitrix\Main\GroupTable::getList([
'filter' => ['=ID' => 1],
// Время жизни кеша в секундах
'cache' => ['ttl' => 3600]
]);
То же самое можно сделать с помощью объекта Query
:
$query = \Bitrix\Main\GroupTable::query();
$query->setSelect(['*']);
$query->setFilter(['=ID' => 1]);
$query->setCacheTtl(150);
$res = $query->exec();
Особенности кеширования
Если данные найдены в кеше, в результате кешированной выборки вернется объект ArrayResult
.
По умолчанию выборки с JOIN не кешируются. Чтобы включить кеширование с JOIN
используйте ключ cache_joins
:
"cache" => ["ttl" => 3600, "cache_joins" => true];
// или
$query->cacheJoins(true);
Сброс кеша
Кеш автоматически сбрасывается при вызове методов add
, update
, delete
. Для принудительного сброса кеша используйте метод cleanCache()
:
// Пример для таблицы пользователей
\Bitrix\Main\UserTable::getEntity()->cleanCache();
Настройки администратора
Администратор проекта может запретить кеширование или изменить время жизни кеша TTL
.