111  /  382
Справочник

Кеширование

Просмотров: 114164
Дата последнего изменения: 10.10.2024
Роберт Басыров
Сложность урока:
2 уровень - несложные понятия и действия, но не расслабляйтесь.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

Производительность

Цитатник веб-разработчиков.

Антон Долганин: На данный момент кеширование Битрикса фактически совершенно, и не стоит изобретать своих велосипедов.

При большом объеме базы данных может возникнуть проблема производительности. Связано это со следующими причинами:

  • обращения к этому массиву информации на чтение или на запись порождают конкурентные запросы;
  • запросы сами по себе быстрые, но их такое число, что БД начинает выстраивать из них очередь;
  • запросы медленные и тяжёлые, и к тому же очень частые.

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

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

Если в качестве примера брать интернет-магазин, то для каждого товара будет создан файл в кеше, чтобы при следующем обращении покупателя сервер не напрягался с запросами к БД. Это и позволяет запускать магазины уровня Эльдорадо.

Кеширование

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

Для реализации этого созданы классы:

  • Cache - финальный класс для кеширования PHP переменных и HTML результата выполнения скрипта.
  • В старом ядре есть классы:
  • CPageCache - класс для кеширования HTML результата выполнения скрипта;
  • CPHPCache - класс для кеширования PHP переменных и HTML результата выполнения скрипта.

Система Bitrix Framework включают в себя разные технологии кеширования:

  • Кеширование компонентов (или Автокеширование) - все динамические компоненты, которые используются для создания веб-страниц, имеют встроенную поддержку управления кешированием.

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

  • Неуправляемое кеширование - возможность задать правила кеширования ресурсоемких частей страниц. Результаты кеширования сохраняются в виде файлов в каталоге /bitrix/cache/ или в произвольной папке root_directory По умолчанию корневая папка файлового кеша — /bitrix/cache/. С версии 24.100.0 главного модуля ее можно заменить на произвольную папку 'root_directory'.
    Настройка параметров ядра
    , заданной в .settings.php. Если время кеширования не истекло, то вместо ресурсоемкого кода будет подключен предварительно созданный файл кеша.

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

    Правильное использование кеширования позволяет увеличить общую производительность сайта на порядок. Однако необходимо учитывать, что неразумное использование кеширования может привести к серьезному увеличению размера каталога /bitrix/cache/.

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

    Кеш меню управляемый и обновляется при редактировании меню или изменении прав доступа к файлам и папкам через административный интерфейс и API.

Основные настройки кеширования расположены на странице Настройки кеширования (Настройки > Настройки продукта > Автокеширование).

Примечание: В ядре D7 настройки кеширования производятся в специальном файле.

Блокирующий режим в системе кеширования

Что такое «блокирующий режим» кеширования

С версии main 24.0.0 в кешировании появился «блокирующий режим». В таком режиме:

  • кеш создается только одним потоком (например, хиты пользователей)
  • остальные потоки получают старое значение кеша, пока новое значение не будет сгенерировано
  • если старого значения нет, то каждый поток генерирует данные, как обычно

В ряде случаев такой подход сильно снижает нагрузку — смотрите ниже пример нагрузочного теста.

Пример нагрузочного теста

Когда работает «блокирующий режим»

«Блокирующий режим» сработает автоматически, если выполнено хотя бы одно из условий:

  • Кеш истек: если кеш устарел, но прошло не больше определенного времени с момента его истечения
  • Кеш был удален: если кеш был удален по ключу, но прошло не больше 60 секунд (это время можно настроить)

    // Удаление кеша по ключу с сохранением старого значения
    $cache = Bitrix\Main\Data\Cache::createInstance(['actual_data' => false]);
    $cache->clean($key, $dir);
    
    // Создание кеша с поддержкой работы со старыми ключами
    $cache = Bitrix\Main\Data\Cache::createInstance(['actual_data' => false]);
    

Чтобы все обращения к кешу были в блокирующем режиме, укажите use_lock => true:

// Memcache
    'cache' => [
        'value' => [
            'type' => [
                'class_name' => '\\Bitrix\\Main\\Data\\CacheEngineMemcache',
                'extension' => 'memcache'
            ],

            'memcache' => ['host' => '127.0.0.1', 'port' => '11211',],
            'use_lock' => true,

            // 'servers' => [
            //    0 => ['host' => '127.0.0.1', 'port' => 11211, 'weight' => 1],
            //    1 => ['host' => '10.100.0.59', 'port' => 11211, 'weight' => 1],
            //    2 => ['host' => 'unix:///var/run/memcached/memcached.sock', 'port' => '0'],
            //],

            'sid' => 'bxMemcache'
        ]
    ],

Когда работает обычный механизм кеширования

Обычный механизм кеширования работает в следующих случаях:

  • кеш создан или очищен без указания параметра ['actual_data' => false]
  • кеш истек по времени больше, чем на заданное время ttl * $ttlMultiplier
  • кеша очищен по тегу или по папке
  • кеш очищен по ключу, но с момента его удаления прошло более 60 секунд

Примечание: по умолчанию компоненты поддерживают работу в «блокирующем режиме».

Список ссылок по теме




66
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии