Автоматическая очистка кэша «Битрикс»
Вы регулярно очищаете кэш «Битрикс»? Никогда не забываете? А если нет, то как вы можете быть уверены, что посетители сайта видят обновленную версию, а не кэшированную? Предлагаем решение, агент для регулярной автоматической очистки кэша «Битрикс».
1. Настроим агент в Панели управления
Перейдя в Панели управления по адресу Настройки > Настройки продукта > Агенты,
создадим новый агент. Зададим настройки:
Интервал (сек): 10
2. Создадим исполняемый файл агента
По адресу /bitrix/php_interface/ должен быть файл init.php. Если его нет, создайте его. Поместите в файл init.php следующий код:
$curentTime = mktime(); if (defined("BX_CRONTAB") && BX_CRONTAB === true) $endTime = time() + 5; //Если на кроне, то работаем 5 секунд else $endTime = time() + 1; //Если на хитах, то не более секунды //Работаем со всем кешем $obCacheCleaner = new CFileCacheCleaner("all"); if (!$obCacheCleaner->InitPath($path)) < //Произошла ошибка return "clean_expire_cache();"; >$obCacheCleaner->Start(); while ($file = $obCacheCleaner->GetNextFile()) < if (is_string($file)) < $date_expire = $obCacheCleaner->GetFileExpiration($file); if ($date_expire) < if ($date_expire < $curentTime) < unlink($file); >> if (time() >= $endTime) break; > > if (is_string($file)) < return "clean_expire_cache(\"" . $file . "\");"; >else < return "clean_expire_cache();"; >>
3. Внимание, Cron!
Время работы скрипта различное и зависит от того, исполняется ли он на Cron или нет. Прверку выполняет приведенный ниже код. Если скрипт исполняется не на Cron, то время исполнения назначается в 1 секунду.
//Если на кроне, то работаем 5 секунд else < $endTime = time() + 1; >//Если на хитах, то не более секунды
Скрипт работает пошагово, продолжает работу с того места, на котором остановился в предыдущем сеансе работы. Это обеспечивается следующим кодом:
Удачи!
Быстро удалить весь кеш Битрикса
По умолчанию Битрикс использует файловы кеш. Чтобы его «почистить», необходимо удалить все файлы в папке /bitrix/cache/. Это можно сделать из панели администратора, в разделе «Автокеширование»-> «очистка файлов кеша». Но удаляются они очень долго. Как же быстро удалить все файлы кеша Битрикса?
Есть один способ. Достаточно выполнить PHP код:
Он промаркирует все файлы кеша битрикса на удаление. В конце названий всех файлов кеша появится приписка из точки, тильды и длинного числа типа: «.~7894561». Получается, что после такой маркировки пути к файлам кеша изменятся, следовательно весь старый кеш сайта не будет восприниматься. Это можно считать за моментальную очистку кеша битрикса. Остаётся только удалить эти файлы. И система сама это сделает: по агентам на хитах или кроне. Причём порциально, по несколько файлов за итерацию. Что довольно долго.
Преимущество такого метода перед стандартным — не надо держать окно браузера открытым и ждать пока файлы удалятся. Недостаток — целый день система будет занята удалением файлов в теневом режиме. Можно ли ей помочь? Часто хочется ускорить процесс, ведь загружать систему тупой работой по самоочистке не разумно. Для этого необходимо дать команду через ssh:
rm -rf /путь_к_сайту_на_сервере/bitrix/cache/*.~*
Такая команда быстро удалит все файлы, которые находятся в папке /bitrix/cache/ и имеют в своём названии точку с тильдой «.~», т.е. именно маркированные на удаление файлы.
В «Битрикс окружение» путь к файлам кеша будет иметь вид:
Если разобраться в содержании этой команды:
rm — удалить файл/папку
-r — Рекурсивное удаление каталогов. Если не поставить этот ключ, то произойдёт удаление только файлов в корневой папке /cache/, но не файлов, вложенных в папки (к примеру, /cache/s1/). одним словом, никакие папки не удалятся.
-f — означает «не спрашивать подтверждение на удаление». Если не поставить этот ключ, то система будет спрашивать действительно ли мы хотим удалить каждый файл. А их там тысячи! Лучше его поставить.
Публикации из этого раздела:
- Место на хостинге — Если база данных выдаёт ошибки при каждом обращении, а загружаемые файлы оказываются пустыми, то ско.
- Процент загрузки файла через AJAX — В предыдущей статье «AJAX загрузка файлов» рассказывал как можно сделать загрузку файла через JQuery.
- Can’t open PID file /var/run/*.pid (yet?) — Предыстория: писал эту статью, обнаружив проблему с NGINX, который выдавал «Can’t open PID file /var.
- Дата центр или хостинг компания — История о том, как я перестал пользоваться обычными хостингами и перешёл на выделенные сервера (VPS).
- WordPress счетчик посещений — К сожалению, WordPress не содержит встроенного счётчика посещаемости. Поэтому для таких сайтов востр.
- MySQL >5.7. Unknown column ‘password’ in ‘field list’ — Перешёл на MySQL версии 5.7 и внезапно встретил некоторые трудности. Оказалось, что в таблице mysql.
- Поддержка и пиар. Выгодно и бесплатно! — Последнее время начали приходить мэйлы со странными попытками получить бесплатную рекламу в форме ра.
- Установка SSL-сертификата на BitrixEnv — Google объявил, что с начала 2017 года все сайты с авторизацией (или формой для ввода данных кредитн.
Добавить комментарий Отменить ответ
Свежие записи
- WordPress. Удалить изображения ко всем постам
- GTK. Включить тёмную тему
- APT. Обновить только один пакет
- Debian. Минимальная установка KDE
- systemd-resolved. Кеширование DNS запросов
- LUKS. Автомонтирование при загрузке
- Android. Отключение автозапуска программ
- Mysql. Загрузка таблицы из CSV
- Linux. Показать изображение в консоли
- Linux. Запустить Firefox в консоли
- Docker. Изменить время внутри контейнера
- Как удалить любое приложение на Android
Востребованное
- iptables. Набор правил
- Отключение ipv6
- Генератор паролей
- Генератор комментариев
- Лучшие названия статей
Рубрики
Комментарии
- Vlad к записи Linux и тачпад. Прикосновение для клика «tap to click»
- Константин к записи Отзыв о CS-Cart. Страшный сон для MySQL
- Maxsimus312 к записи Linux и тачпад. Прикосновение для клика «tap to click»
- Alex к записи Linux и тачпад. Прикосновение для клика «tap to click»
- Dmitry к записи Linux и тачпад. Прикосновение для клика «tap to click»
Как в Битрикс очистить кеш, чтобы у пользователей обновились данные?
Поменял картинку на главной странице, сбросил весь кеш через админку.
Но все ровно захожу с другого браузера на сайт и вижу старую..
Как решить эту проблему?
- Вопрос задан более трёх лет назад
- 6301 просмотр
Комментировать
Решения вопроса 1

Скорее всего проблема в имени файла.
Если ранее заходили, то браузер закеширует изображение.
Добавьте к имени файла ?p=1
Или нажмите ctrl+f5
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
nikita1sm @nikita1sm Автор вопроса
Спасибо! Поменял название картинки в файле и в html у после этого помоголо, ладе кеш не нужно сбрасывать
Ответы на вопрос 4

Делаю штуки
Сверху в админке кнопка очистить кэш.
Либо в настройки продукта->автокеширование->там вкладка очистить кэш.

Зачем нужен кэш и как его очистить в Битриксе?

Накопление большого объема баз данных влечет проблемы с производительностью сайта. Основной на то причиной является медленная обработка запросов. Здесь поможет многоуровневое кэширование. Кэш Битрикс имеет много сложных особенностей, из-за чего работать с ним не так просто. Перед работой необходимо внимательно ознакомиться с основными его параметрами.
Директ Лайн
Крупнейшее региональное интернет-агентство России. ТОП-10 в рейтинге Рунета.
1200+ проектов
90 специалистов
15 лет на рынке
Что такое кэш и для чего нужно кэширование?
Кэш представляет собой специальное хранилище, в который попадают результаты работы ресурсоемких или редко обновляемых частей кода. Благодаря кэшированию сайты функционируют быстрее, что положительно сказывается на SEO и повышает удовлетворенность пользователей.
Когда браузер запрашивает веб-страницу, сервер выполняет множество сложных вычислений. Он находит последние записи, генерирует подвал и шапку сайта, ищет виджеты боковых панелей и т.д. Кэширование позволяет запомнить окончательный результат и не обрабатывать каждый запрос по отдельности.
Сайт, собранный и реализованный надлежащим образом, загружается всего за пару секунд. Но даже в этом случае следует использовать кэширование. Так вы сократите время загрузки, где каждая секунда сказывается на уровне конверсии.
Нет времени разбираться?
Техподдержка сайта на «1С-Битрикс» под ключ
Специализируемся на «1С-Битрикс» более 10 лет и знаем все подводные камни и специфику. Работаем с сайтами любой технической сложности и бизнес-логики. При необходимости подключаем UX-специалиста и дизайнера. В течение 2 часов реагируем на обращения в тикетной системе.
1С-Битрикс имеет производительную систему кэширования. Она применяется в стандартных компонентах Битрикс, но может использоваться при самостоятельной разработке. Основная ее задача – понизить время отклика сайта и увеличить его устойчивость при нагрузках. Для реализации кэширования в системе есть два класса:
- CPageCache — для кэширования HTML результата выполнения скрипта.
- CPHPCache — для кэширования HTML и PHP переменных.
Каждый класс имеет несколько собственных методов.
CPhpCache
Класс CPhpCache, необходимый для кэширования PHPпеременных и HTMLрезультата реализации скрипта, включает 8 основных методов:
- StartDataCache. Этот метод ответственен за инициализацию механизма кэширования и запуск буферизации. Вторая функция — вывод содержимого из кэша.
- EndDataCache. Сохраняет PHP переменные файлы кэша и буферизированный HTML.
- InitCache. Подготавливает механизм кэширования. Выполняет проверку на наличие валидного и неистекшего файла кэша. При обнаружении такого файла происходит его подключение.
- GetVars. Ответственен за возвращение PHP переменных, сохраненных в кэше.
- Output. Выводит результат, сохраненный в кэше HTML.
- IsCacheExpired. Этот метод доступен с версии Битрикс 3.3.7. Проверяет продолжительность жизни кэша.
- CleanDir. Доступен с версии 8.5.1. Ответственнен за очистку кэша по параметру basedir.
- AbortDataCache. Отменяет создание текущего кэша.
Пример кэширования HTMLи PHPпеременных выглядит следующим образом:
GetUserGroupString(); // если кэш есть и он ещё не истек то if($obCache->InitCache($life_time, $cache_id, "/")): // получаем закэшированные переменные $vars = $obCache->GetVars(); $SECTION_TITLE = $vars["SECTION_TITLE"]; else : // иначеобращаемсякбазе $arSection = GetIBlockSection($SECTION_ID); $SECTION_TITLE = $arSection["NAME"]; endif; // добавляем пункт меню в навигационную цепочку $APPLICATION->AddChainItem($SECTION_TITLE, $SECTION_URL."SECTION_ID=".$SECTION_ID); // начинаем буферизирование вывода if($obCache->StartDataCache()): // выбираем из базы параметры элемента инфоблока if($arIBlockElement = GetIBlockElement($ELEMENT_ID, $IBLOCK_TYPE)): echo""; print_r($arIBlockElement); echo""; endif; // записываем предварительно буферизированный вывод в файл кэша // вместе с дополнительной переменной $obCache->EndDataCache(array( "SECTION_TITLE" => $SECTION_TITLE )); endif; ?>
Здесь кэшируется HTMLи PHP переменная $SECTION_TITLE. Тип и структура PHP переменных произвольные.
Что следует делать для отключения кэша на одной странице? Авторизуйтесь с административными правами и вызовите нужную страницу параметром &clear_cache=Y (переменная clear_cache_session). Чтобы отключить кэш для всех страниц, просмотренных в рамках сессии, вызовите любую страницу параметром &clear_cache_session=Y.
Привлекли 35.000.000 людей на 185 сайтов
Мы точно знаем, как увеличить онлайн–продажиПрименяем лучшие практики digital–продвижения как из вашей тематики, так и из смежных областей бизнеса. Именно это сделает вас на голову выше конкурентов и принесёт лиды и продажи.
CPageCache
Этот класс использует все те же методы, что и CPhp, за исключением GetVars, CleanDir и AbortDataCache. Пример кэширования HTML с помощью класса CpageCache выглядит следующим образом:
GetUserGroupString(); // инициализируембуферизированиевывода if($obCache->StartDataCache($life_time, $cache_id, "/")): // выбираем из базы параметры элемента инфоблока if($arIBlockElement = GetIBlockElement($ELEMENT_ID, $IBLOCK_TYPE)): echo""; print_r($arIBlockElement); echo""; endif; // записываем предварительно буферизированный вывод в файл кэша $obCache->EndDataCache(); endif; ?>
Метод StartDataCache ищет валидный и не истекший файл кэша, подключает его и выводит на экран. В ином случае включается буферизация. Задается интервал времени в секундах, в течение которого файл кэша будет не истекшим и валидным. Ее результаты записываются в файл кэша методом EndDataCache. Этот же параметр сохраняет идентификатор конкретного экземпляра кэша. Если какие-то переменные способны повлиять на итог выполнения кэшируемого кода, то их значения включаются в этот идентификатор.
Почему разрастается папка кэша?
Результаты кэширования сохраняются в виде файлов в каталоге /bitrix/cache/. Если время кэширования не истекло, то вместо ресурсоемкого кода подключается заранее созданный файл кэша. Однако следует помнить, что неразумное использование кэширования приведет к серьезному разрастанию размера каталога /bitrix/cache/. Что делать в такой ситуации? Для начала стоит разобраться с основными причинами.
Очень большой и сложный сайт
Одной из причин увеличения объема папки кэша может быть большой вес вашего сайта. Допустим, интернет-магазин имеет 10 тысяч товаров в одной категории. При этом на одной странице размещено 10 товаров, а ее вес составляет 10Кб кэша. Если кэшировать каждую страницу по отдельности, то размер данных будет слишком большим. При 10 тыс. единиц по 10Кб получится 100Мб. При этом размер может быть и больше – тут все зависит от типа и особенностей верстки.
Если подключено два вида отображения товаров (например, списком и плиткой), то размер кэша увеличится вдвое. Не стоит забывать и про фильтр, результаты которого также кэшируются. Получается больше 200 Мб на один только каталог при малом размере кэша.
Если у вас сложный и объемный сайт, то проблема разрастания папки кэша решается двумя способами. Первый – выбор правильного времени кэширования, второй – увеличение дискового пространства.
Неправильно определено время кэширования
Вторая популярная проблема связана с неграмотным расчетом времени кэширования. Допустим, у вас установлено время жизни кэша на 3 месяца. При этом за все это время на него никто не зашел. Особенно это проблемно при объемном кэше. Например, его размер – от 500Кб до 1 Мб. Храниться он будет довольно долго, даже если к нему не было обращения.
Решение тут простое: нужно грамотно подобрать время кэширования и расставить параметры компонентов. Возможно, время придется сократить, а некоторые данные и вовсе не кэшировать.
Неправильно настроен кэш собственных или битриксовых компонентов
Чтобы не возникало проблем с объемами данных, заранее проверяйте параметры кэширования в компонентах. Ошибки могут быть как в собственных, так и в стандартных настройках. Внимательно изучите, на основе чего формируются собственные компоненты. В некоторых случаях их придется переписать.
Простой пример: передаваемые кэшу данные меню начнут сильно увеличиваться в объемах и кэшироваться на длительное время, если в Битриксе указать MENU_CACHE_VARS. Этот метод создает кэш под каждый набор параметров.
Ошибка с механизмом очищения кэша
Еще одна причина разрастания данных, которая решается сокращением времени кэширования и проверкой всех параметров. Например, кэш не успевает удаляться, из-за чего накапливается в больших объемах. Как следствие – порождение дублей одного и того же кэша в разных компонентах.
Как сбросить кэш?
Чтобы почистить кэш Битрикс, необходимо зайти в панель администратора, раздел «Автокэширование» - «очистка файлов кэша». Далее нужно удалить все файлы в папке /bitrix/cache/.
Очистка файлов кэша в Битрикс
Второй вариант – удаление данных в панели инструментов для конкретной страницы:
Удаление кэша для конкретной страницы в Битрикс
Наконец, в настройках компонента для конкретного компонента:
Настройка кэша компонента в Bitrix
Для композитного сайта можно сбросить кэш в разделе «Настройки» - «Настройки продукта» - «Композитный сайт» - «Страницы».
Об особенностях внедрения этой технологии мы писали в статье об оптимизации сайта на «Битриксе».
Есть еще один, более простой вариант действий для сбрасывания кэша. Нужно выполнить PHP-код:
$obCache = newCPHPCache(); $obCache->CleanDir();Все файлы кэша Битрикс будут промаркированы на удаление. Пути к файлам кэша изменятся, а значит, весь старый кэш сайта попросту не будет восприниматься. Это можно считать за моментальную очистку кэша. Останется лишь удалить указанные файлы.
Основным преимуществом такого метода считается отсутствие необходимости держать окно браузера открытым и ждать полного удаления файлов. Система ликвидирует их порционно, по несколько файлов за итерацию.
Настройка кэширования сайта
Система Bitrix включает разные технологии кэширования:
- Автокэширование. Динамические компоненты, используемые для создания веб-страниц, имеют встроенную поддержку управления кэшированием. Технология включается соответствующей кнопкой на административной панели.
- Неуправляемое кэширование. Дает возможность установить правила кэширования ресурсоемких частей страниц. Результаты кэширования сохранятся в виде файлов в каталоге bitrix/cache/. Кэш здесь не перестраивается автоматически после модификации исходных данных, а действует в течение определенного времени после создания. В связи с этим он и называется неуправляемым.
- Управляемое кэширование. Кэшированные данные обновляются незаметно для пользователя. Происходит это по мере обновления первичных данных, то есть управляются они самими данными. Такая технология используется в основном ядре продукта.
- Кэширование меню. Здесь используется специальный алгоритм, учитывающий, что большинство посетителей - это незарегистрированные пользователи. Кэш меню управляемый. Оно обновится, если отредактировать меню или изменить права доступа к файлам и папкам через API и административный интерфейс.
Отдельно следует обозначить кэширование графических файлов и HTML кэширование.


