Битрикс сбросить кэш программно

Обновлено: 07.07.2024

Кеширование позволяет уменьшить нагрузку на аппаратные ресурсы, таким образом влияя на время отклика сайта. Используется как в стандартных компонентах, так и в компонентах, разработанных под свои нужды. Результаты ресурсоемких, а так же редко обновляемых кусков кода заносятся в кеш, при повторном запросе результат выдается из кеша.

Старое ядро

В старом ядре Битрикс для кеширования есть два класса — это CPageCache и CPHPCache . Первый служит для кеширования сформированного HTML-кода, второй — для кеширования HTML-кода и PHP-переменных. Файлы кеша записываются в каталог /bitrix/cache/ .

Класс CPageCache

Значение переменной $cacheDir начинается со слеша и им не заканчивается. При использовании в качестве кеша memcached это будет критичным при сбросе кеша.

Файл кеша /bitrix/cache/some-cache-dir/47/476bb6ea1797242d5401ed9ec02c831e.html содержит в себе отметку времени (функция time() ) — когда она станет меньше текущей, кеш уже не актуален:

Класс CPHPCache

Пример кеширования PHP-переменных:

Файл кеша /bitrix/cache/other-cache-dir/47/476bb6ea1797242d5401ed9ec02c831e.php :

Еще один пример — в кеш сохраняется HTML-код и PHP-переменные:

Внутри HTML-кеша нельзя использовать отложенные функции. По той простой причине, что они просто не будут выполняться. Точнее говоря, функции будут выполнены один раз в момент создания файла кеша. А при всех последующих запросах будет выдано закешированное содержимое. Поэтому в коде выше функции SetTitle() и AddChainItem() вызываются за пределами HTML-кеша.

Файл кеша /bitrix/cache/other-cache-dir/47/476bb6ea1797242d5401ed9ec02c831e.php :

Новое ядро

Аналогом CPHPCache в новом ядре является класс \Bitrix\Main\Data\Cache . Основные различия в методах в том, что названия методов нового класса пишутся с прописной буквы в соответствии с новыми требования оформления кода. В остальном внешне изменений практически нет:

Файл кеша /bitrix/cache/another-cache-dir/47/476bb6ea1797242d5401ed9ec02c831e.php :

Очистить кеш, сохраненный в директории /bitrix/cache/another-cache-dir/ можно следующим образом:

Очистить весь кеш (т.е. все содержимое директории /bitrix/cache/ ):

Этот код промаркирует директрии кеша на удаление:

В конце названий всех директорий появится приписка из точки, тильды и длинного числа. После такой маркировки пути к файлам кеша изменятся, следовательно весь старый кеш сайта не будет восприниматься. Остаётся только все это удалить. И система сама это сделает: по агентам на хитах или кроне. Причём небольшими порциями, по несколько файлов за итерацию.

По умолчанию Битрикс использует файловы кеш. Чтобы его "почистить", необходимо удалить все файлы в папке /bitrix/cache/. Это можно сделать из панели администратора, в разделе "Автокеширование"-> "очистка файлов кеша". Но удаляются они очень долго. Как же быстро удалить все файлы кеша Битрикса?

Есть один способ. Достаточно выполнить PHP код:

Он промаркирует все файлы кеша битрикса на удаление. В конце названий всех файлов кеша появится приписка из точки, тильды и длинного числа типа: ".

7894561". Получается, что после такой маркировки пути к файлам кеша изменятся, следовательно весь старый кеш сайта не будет восприниматься. Это можно считать за моментальную очистку кеша битрикса. Остаётся только удалить эти файлы. И система сама это сделает: по агентам на хитах или кроне. Причём порциально, по несколько файлов за итерацию. Что довольно долго.

Преимущество такого метода перед стандартным - не надо держать окно браузера открытым и ждать пока файлы удалятся. Недостаток - целый день система будет занята удалением файлов в теневом режиме. Можно ли ей помочь? Часто хочется ускорить процесс, ведь загружать систему тупой работой по самоочистке не разумно. Для этого необходимо дать команду через ssh:

rm -rf /путь_к_сайту_на_сервере/bitrix/cache/*.

Такая команда быстро удалит все файлы, которые находятся в папке /bitrix/cache/ и имеют в своём названии точку с тильдой ".

", т.е. именно маркированные на удаление файлы.

В "Битрикс окружение" путь к файлам кеша будет иметь вид:

Если разобраться в содержании этой команды:

rm - удалить файл/папку

-r - Рекурсивное удаление каталогов. Если не поставить этот ключ, то произойдёт удаление только файлов в корневой папке /cache/, но не файлов, вложенных в папки (к примеру, /cache/s1/). одним словом, никакие папки не удалятся.

-f - означает "не спрашивать подтверждение на удаление". Если не поставить этот ключ, то система будет спрашивать действительно ли мы хотим удалить каждый файл. А их там тысячи! Лучше его поставить.

Данная статья — это не научный прорыв, а лишь помощник, чтобы быстрее понять, как работает стандартный функционал в Bitrix.

Давайте представим, что в разделе каталога у нас 150 запросов к БД. Вроде бы немного при условии, если в один момент обращение к разделу происходит одним пользователем?

При одновременном обращении к разделу 200-т пользователей количество запросов равняется 200 * 150 = 30 000

Кеширование помогает снизить нагрузку на БД и сервер в целом.

Не судите за то, что я использую старое ядро в примере. Суть данной статьи показать, как это работает и потребности темы полностью покрываются.

2. Простое кеширование

Результат выполнения кода — это переменная $arCurSection со значениями полученными из кеша или запросов к БД.

Проблема данного метода в том, что если что-то изменится в инфоблоке, то результат будет нерелевантным. Решение данной проблемы описано в пункте 3.

3. Тегированный кеш

Для того, чтобы решить проблему описанную в пункте 2, надо почистить директорию с кешем /iblock/catalog (путь не относительно корня сайта, а относительно папки с кешем) в момент добавления, изменения, удаления элементов инфоблока и связанных с ним сущностей, которые выводит наш компонент.

Для того, чтобы не изобретать «городушки» для сброса кеша при изменениях, был придуман тегированный кеш.

Для того, чтобы месту хранения кеша присвоить кеш используем это:

Сброс кеша по тегу можно осуществить следующим способом:

В итоге нам нужно лишь в нужный момент (навесить на события) сделать сброс кеша по тегу.

Например, в стандартных компонентах, использующих инфоблок, используется тег вида «iblock_id_17» и по этому тегу вызывается метод сброса кеша, который вызывается в методах добавления, изменения, удаления элемента инфоблока.

Метод из ядра битрикс использующий ClearByTag:

4. Пример нестандартного использования кеша в каталоге

Когда мы знаем, как работает кеширование, то можем легко доработать кеширование у стандартного компонента каталога.

Косяк стандартного решения — при изменении какого-либо элемента сбрасывается весь кеш (элементы, разделы).

Чтобы не заставлять систему лишний раз делать запросы, производить расчеты и набирать кеш, можно для головных разделов предусмотреть отдельный кеш. Вывести из под общего тега-инфоблока.

Тут единственная трудность в том, что бы хорошенечко подумать, в каких местах стоит так сделать.

5. Заключение

Смысл статьи не в научном открытии или какой-то доселе неведомой технологии, а демонстрации простоты решений.

Да, я коснулся лишь малой части кеширования. Для простоты восприятия пусть будет этот минимум.

Если у вас есть примеры, как можно использовать данный стандартный функционал, то пишите комментарии. Если есть примеры нестандартных решений — делитесь опытом.

Кеш - это специальное хранилище, в котором сохраняются результаты работы редко обновляемых или ресурсоёмких кусков кода.

Управление размещением кеша можно через константы в файлах /bitrix/php_interface/dbconn.php и /bitrix/.settings.php. В dbconn.php используется константа BX_CACHE_TYPE, которая может принимать значения:

  • files – размещать кеш на жёстком диске. Используется по умолчанию;
  • memcache, apc, xcahe – соответствующая внешняя система кеширования. Прежде чем её выбрать, следует удостовериться, что она установлена на сервере, иначе будет использоваться файловая система.

КАК РАБОТАЕТ КЕШ В BITRIX

В Битриксе существует несколько вариантов кеширования

  1. Неуправляемое кеширование – Результат работы сохраняется в виде файла и возвращается до тех пор, пока не истечёт его время жизни, после чего он будет перестроен. Неуправляемым этот тип кеширования называется потому, что перестраиается только после истечения своего времени жизни.
  2. Управляемое кеширование – в отличие от неуправляемого кеширования обновляется при обновляется при изменении исходных данных компонента.
  3. Автокеширование Вариант управляемого кеширования для компонентов. Каждый компонент заводит собственный кеш и управляет им. Такое кеширование может быть отключено для всех компонентов из админки.
  4. Кеширование меню – Вариант управляемого кеша, созданный специально для меню.
  5. HTML кеширование – устаревший тип кеширования, заменённый композитным сайтом.

ИСПОЛЬЗОВАНИЕ КОМПОЗИТНОГО САЙТА

Композитный сайт - один из видов кеширования в Битрикс. Основная идея заключается в том, чтобы разделить сайт на две части — статическую и динамическую. Статическая часть кешируется и сразу отдаётся клиенту при запросе, после чего, через AJAX-запросы, запрашиваются динамические части страницы. Благодаря этому кажется, что страница загрузилась быстрее. Композитный сайт можно запустить в разделе Настройки > Настройки продукта > Композитный сайт в режиме Автокомпозит, либо Композит.

При режиме автокомпозит, битрикс автоматически производит настройки компонентов автоматически. Для сложных сайтов можно выбрать режим Композит, однако настраивать компоненты придётся вручную.

После включения рекомендуется несколько раз пройтись по страницам сайта в режиме «Инкогнито», чтобы создать кеш для страниц. При этом можно заметить, что на страницах появляется кнопка «Быстро с 1С-Битрикс». Настроить её вид, или отключить полностью можно на вкладке Кнопка "Быстро с 1С-Битрикс" в разделе Настройки > Настройки продукта > Композитный сайт. Следует помнить, что для того чтобы сайт отобразил эти изменения на страницах, придётся сбросить их кеш.

При настройке композитного сайта можно увидеть параметр - Голосование за композитный режим. Смысл его в следующем — компоненты страницы голосуют за включение композитного режима на странице. Режим включится, если большинство компонентов проголосует «За».

Параметр «Содержимое компонента» указывает, будет ли содержимое статическим, или подгружаться через AJAX, и если да, то в каком виде.

Читайте также: