Работать с кешем в Bitrix достаточно просто. Можно делать следующее:
- Записывать данные в кеш
- Извлекать данные из кеша
- Определять время кеширования (при записи)
- Удалять кешированные данные
В старом ядре, для работы с кешем можно использовать объект класса CPHPCache. В D7 — класс \Bitrix\Main\Data\Cache
Работа с кешем в старом ядре Bitrix
Описание аргументов метода 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")Простой пример работы с кешем в старом ядре:
$cacheId = 'cach_id'; // Идентификатор кеша
$lifeTime = 120*60; // 2 часа
$cacheDir = '/cache_dir/'; //Будем искать кеш в папке bitrix/cache (хоят можно задать и другие папки - для удобства использования кеша)
$obCache = new CPHPCache();
if($obCache->InitCache($lifeTime, $cacheId, $cacheDir))// Если кэш найден
{
$links = $obCache->GetVars(); // Если в указанной папке нашлись кешированные данные по идентификатору кеша, извлекаем данные из кэша и сохраняем в $links
$obCache->Output(); // Выводим на экран содержимое кеша
}
elseif($obCache->StartDataCache()) // Если кэш не найден
{
if($links = getData()) {
$obCache->EndDataCache($links);// Сохраняем переменные в кэш.
}
}Можно проверить существование кеша в заданной папке с помощью IsCacheExpired (вернет булево значение). Выглядит примерно так:
$cacheDir = '/cache_dir';
$path = $_SERVER["DOCUMENT_ROOT"]."/bitrix/cache".$cacheDir; // Важно указать полный путь к файлу кеша
if($handle = @opendir($cacheDir)) // Открываем директорию для чтения
{
while(($file = readdir($handle)) !== false)
{
if($file == "." || $file == "..") continue; // Пропускаем текущий и родительский каталоги
if(!is_dir($path."/".$file)) // Проверяем, является ли файл директорией
{
if(substr($file, -5)==".html") // Если расширение файла .html, проверяем, истек ли срок его кэширования
$expired = CPageCache::IsCacheExpired($path."/".$file); // Вернет булево значение, CPageCache - для работы с HTML файлами
elseif(substr($file, -4)==".php") // Если расширение файла .php, проверяем, истек ли срок его кэширования
$expired = CPHPCache::IsCacheExpired($path."/".$file); // Вернет булево значение, CPHPCache - для работы с php файлами
}
}
}Можно очистить кеш с помощью метода CleanDir:
$cacheDir = '/cache_dir/';
$path = $_SERVER["DOCUMENT_ROOT"]."/bitrix/cache/".$cacheDir; // Важно указать полный путь к файлу кеша
$obCache = new CPHPCache();
$obCache->CleanDir(false, $path); // Параметры: рекурсивное удаление данных в указанной директории; путь к директорииПервый параметр в методе CleanDir() отвечает за рекурсивное удаление всех файлов и поддиректорий в указанной директории.
Значение этого параметра равно:
- true — будут удалены все файлы и поддиректории в указанной директории и всех ее поддиректориях.
- false — будут удалены только файлы и поддиректории, находящиеся непосредственно в указанной директории
В старых версиях Ядра Битрикс (до 20.0) простой и управляемый кеш отсутствует. Вместо этого используется комплексный кеш, который автоматически кеширует различные компоненты и данные для оптимизации производительности сайта. Этот кеш автоматически очищается при изменении данных и обновляется при необходимости.
Работа с кешем в новом ядре Bitrix
В D7 работа с кешем несколько усовершенствована. Появился простой (simple) и управляемый (managed) кеш.
- Простой кеш – это кеш, в котором данные хранятся на протяжении всего времени жизни скрипта. Кэширование выполняется за счет сохранения данных в оперативной памяти сервера. Простой кеш в Bitrix D7 реализован с помощью класса Bitrix\Main\Data\Cache. Здесь нет дополнительных функций управления или обновления данных.
- Управляемый кеш – это кеш, который позволяет сохранять данные не только в оперативной памяти, но и в других местах, таких как база данных или файловая система. Управляемый кеш позволяет более гибко управлять хранением и обновлением кэшированных данных. В Bitrix D7 управляемый кеш реализован с помощью класса Bitrix\Main\Data\ManagedCache.
Предоставляет мощные возможности для контроля и обновления кэшированных данных, а также более гибкую настройку и использование разных типов данных и хранилищ
Простой кеш
Пример работы с простым кешем в D7:
use \Bitrix\Main\Data\Cache;
$cache = Cache::createInstance(); // получаем экземпляр класса
if ($cache->initCache(3600, "cache_key")) { // проверяем кеш и задаём настройки
$vars = $cache->getVars();
}
elseif ($cache->startDataCache()) {
// некоторые действия...
$cache->endDataCache(array("key" => "value")); // записываем в кеш
}Когда метод initCache() возвращает true, это указывает на то, что данные уже находятся в кеше и их можно получить с помощью метода getVars(). Метод getVars() возвращает массив данных из кеша, который был сохранен с использованием метода endDataCache().

Об авторе
Сергей Житников - Веб-разработчик
Занимаюсь веб-разработкой более 5 лет. Специализируюсь на создании адаптивных сайтов и веб-приложений на HTML5, CSS3 и JavaScript. Работаю с популярными CMS и фреймворками, а также уделяю большое внимание оптимизации производительности и чистоте кода.
Есть проект или идея? Буду рад помочь!
Связаться со мной