Документация для разработчиков
Темная тема

Инструкция по настройке кеширования

Использование кеширования в оперативной памяти

В версии 8.5.1 главного модуля появилась поддержка кеширования не только на диск, но и в разделяемую память.

Акселераторы PHP поддерживают API работы с разделяемой памятью. Это значит, что все процессы веб-сервера могут читать и писать в общее адресное пространство. Это позволяет организовать совместно используемый синхронный кеш.

Хотя данные приложения, кешированные в файл, кешируются на уровне файловой системы, бывают ситуации (например: резервное копирование) когда этот кеш вытесняется и становится не эффективным для использования.

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

PHP приложения

Программа Описание Версия
APC Использует уже имеющиеся механизмы разделяемой памяти. Предоставляя PHP программисту функции apc_fetch, apc_store и apc_delete.
  • Недостаток 1: использует общую для скриптов и кеша память.
  • Недостаток 2: при кешировании требуется сериализация данных.

eAccelerator При сборке расширения необходимо указать "--with-eaccelerator-shared-memory". Имеет те же недостатки, что и APC. Достоинство: есть возможность настроить сохранение кеша на диск.

Примечание. eAccelerator не совместим с PHP версий выше 5.3

Не поддерживается с версии 15.5.0

Демон memcached

Кроме акселераторов, схожим, но гораздо более богатым функционалом обладает демон memcached.

Это отдельный процесс использующий для коммуникаций протокол TCP/IP, который может поддерживать распределенный, разделяемый, синхронный кеш. К серверу, на котором запущен memcached, можно подключить более одного веб-сервера. Использование memcached решает проблемы кеша акселераторов, но на первое место выходит штраф производительности из-за транспорта протокола.

Пример работы с memcached на Ubuntu. Установка:

aptitude install memcached

Настройки демона хорошо документированы и расположены файле /etc/memcached.conf

Запуск демона:

/etc/init.d/memcached start

Для PHP имеется три расширения для работы с сервером memcached. На данный момент "1С-Битрикс: Управление сайтом" поддерживает расширение memcache. При этом при использовании memcache к нему можно подключиться через unixsocket:

define("BX_MEMCACHE_HOST", "unix:///path/to/memcached.sock"); 
define("BX_MEMCACHE_PORT", "0");

Однако предварительно нужно настроить memcached для работы через сокеты. Для этого необходимо в файле настройки memcached изменить сточку OPTIONS="" на OPTIONS="-s /tmp/memcached.sock -a 00755". И только после этого вносить изменения в dbconn.php.

Настройка Битрикса

Управление кешем реализуется через константы определяемые в файле dbconn.php (В версии ядра выше 14.0 настройки производятся в других файлах).

Константа Описание
BX_CACHE_TYPE Самая важная из всех. Может принимать следующие значения:
  • files - использовать в качестве хранилища кеша диск. Это полностью совместимое поведение. При неудачных попытках включения других типов кеша будет использован именно этот тип.
  • memcache - подключаться к memcached для сохранения кеша. Включится только приналичии загруженного расширения "memcache" и установлении соединения с сервером.
  • eaccelerator - использовать в качестве хранилища разделяемую область памяти eAccelerator'а. (Важно! eAccelerator начиная с версии 0.9.6 не поддерживает пользовательские функции кеширования, а значит для этой версии описанный здесь механизм работать не будет.)
  • apc - APC.
  • xcache - XCache.

Пример:
define("BX_CACHE_TYPE", "memcache");
BX_CACHE_SID Обязательно определять, если на одном сервере запущено более одного экземпляра "1С-Битрикс: Управление сайтом". Это соль которая будет подмешана ко всем ключам кеша. И позволит им "не перепутаться".

Пример:
define("BX_CACHE_SID", $_SERVER["DOCUMENT_ROOT"]."#01");
BX_MEMCACHE_HOST Необходима только при использовании memcache. В ней определяется адрес сервера на котором запущен демон memcached.

Пример:
define("BX_MEMCACHE_HOST", "192.168.0.43"); 
BX_MEMCACHE_PORT Не обязательная, по умолчанию принимает значение 11211.

Примечание. Система проверяет чтобы параметр eaccelerator.shm_max был установлен в ненулевое значение.



© «Битрикс», 2001-2024, «1С-Битрикс», 2024