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

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

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

В версии 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 был установлен в ненулевое значение.



Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Антон Долганин
Цитата
Недостаток 1: использует общую для скриптов и кеша память.
Недостаток 2: при кешировании требуется сериализация данных.
Для xCache аналогичные недостатки в принципе.
4
Антон Долганин
Цитата
BX_CACHE_SID Обязательно определять, если на одном сервере запущено более одного экземпляра "1С-Битрикс: Управление сайтом".

И обратно - если на одной копии продукта размещено несколько сайтов, для всех них значение должно быть одинаковое. Иначе, кеш, созданный на одном сайте коробки не будет виден на другом сайте. Это критично для COption, кеш которой должен быть общим для все сайтов.
0
Игорь Андрианов
Коллеги, если вы переносите локально настроенный сервер с одного IP на другой IP (например, VPS от одного хостера к другому или просто железо из офиса в д/ц) и у вас используется MEMCACHE, пожалуйста, НЕ ЗАБУДЬТЕ ПОМЕНЯТЬ IP адрес в параметре BX_MEMCACHE_HOST на новый !!!
[FONT=Verdana, Tahoma, Arial, Helvetica, sans-serif]Иначе будите как мы возить его туда-сюда: [/FONT]http://partners.1c-bitrix.ru/life/forum/messages/forum11/topic39420/message214911/?sessid=30eb63ee902c055cf94fa8a622a8de8a&TOPIC_SUBSCRIBE=Y&result=new#message214911
6
Александр Демчишин
1. не забудьте для ubuntu поставить php расширение memcache (без d), иначе битрикс не увидит memcached, команда: sudo apt-get install php5-memcache
2. и здесь если сайт на localhost: define("BX_MEMCACHE_HOST", "127.0.0.1");
3. файл dbconn.php находится по адресу bitrix/php_interface
4. затем перезапуск memcached и apach:
sudo /etc/init.d/memcached restart
sudo /etc/init.d/apache2 restart
4
Сергей Ковалев
Следует также учитывать, что при использовании FastCGI у каждого процесса PHP будет свой кэш APC/eAccelerator, что приведет одновременно к многократному кэшированию одних и тех же данных и "странному" поведению продукта.

Проблема может быть решена передачей управления потомками самому PHP (через опцию PHP_FCGI_CHILDREN), что не рекомендуется, так как сам PHP имеет гораздо меньше возможностей по управлению потомками. Также использование PHP_FCGI_CHILDREN в mod_fcgid (но не в mod_fastcgi) может значительно ограничить производительность, т.к. mod_fcgid одновременно передает только один запрос процессу PHP, независимо от количества его потомков.

Таким образом, при использовании FastCGI разумным выбором будут изначально разделяемые кэши — в файлах или memcached.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх