В версии 8.5.1 главного модуля появилась поддержка кеширования не только на диск, но и в разделяемую память.
[spoiler]
Акселераторы PHP поддерживают API работы с разделяемой памятью. Это значит, что все процессы веб-сервера могут читать и писать в общее адресное пространство.
Это позволяет организовать совместно используемый синхронный кеш.
Вы можете сказать: "Но ведь данные приложения, кешированные в файл, кешируются на уровне файловой системы". На что можно ответить: "Бывают ситуации (например: резервное копирование) когда этот кеш вытесняется и становится не эффективным для использования".
Преимуществом разделяемого кеша акселераторов является его нахождение в оперативной памяти. Случай свопинга не рассматриваем т.к. наличие свопинга говорит о неадекватной настройке хостинга. На производительной системе свопинга быть не должно. Вообще.
Недостатком - его полный сброс при перезапуске веб сервера.
1.
Использует уже имеющиеся механизмы разделяемой памяти. Предоставляя PHP программисту функции apc_fetch, apc_store и apc_delete.
Недостаток 1: использует общую для скриптов и кеша память.
Недостаток 2: при кешировании требуется сериализация данных.
2.
При сборке расширения необходимо указать "--with-eaccelerator-shared-memory".
Имеет те же недостатки, что и APC.
Достоинство: есть возможность настроить сохранение кеша на диск.
3. Кроме акселераторов, схожим, но гораздо более богатым функционалом обладает демон .
Это отдельный процесс использующий для коммуникаций протокол TCP/IP, который может поддерживать распределенный, разделяемый, синхронный кеш. К серверу на котором запущен memcached можно подключить более одного веб сервера. Использование memcached решает проблемы кеша акселераторов, но на первое место выходит штраф производительности из-за транспорта протокола.
На Ubuntu запустить memcached проще простого:
Установка:
настройки находятся в хорошо документированном файле:
Запуск:
Для PHP имеется три расширения для работы с сервером memcached. На данный момент Битрикс поддерживает "".
4 Настройка Битрикса:
Управление кешем реализуется через константы определяемые в файле dbconn.php
Самая важная "BX_CACHE_TYPE" может принимать следующие значения:
Пример:
Вторая константа "BX_CACHE_SID".
Ее просто НЕОБХОДИМО определять, если на одном сервере запущено более одного Битрикса. Это соль которая будет подмешана ко всем ключам кеша. И позволит им "не перепутаться" (что я удивленный и наблюдал во время тестирования).
Пример:
Третья константа нужна только при использовании memcache - "BX_MEMCACHE_HOST".
В ней определяется адрес сервера на котором запущен демон memcached.
Пример:
И не обязательная "BX_MEMCACHE_PORT", по умолчанию принимает значение 11211.
Результаты тестирования довольно противоречивы. Однозначного плюса (как и минуса) не получил ни один из механизмов.
Пробуйте. Делитесь опытом. Давайте советы.
[spoiler]
Акселераторы PHP поддерживают API работы с разделяемой памятью. Это значит, что все процессы веб-сервера могут читать и писать в общее адресное пространство.
Это позволяет организовать совместно используемый синхронный кеш.
Вы можете сказать: "Но ведь данные приложения, кешированные в файл, кешируются на уровне файловой системы". На что можно ответить: "Бывают ситуации (например: резервное копирование) когда этот кеш вытесняется и становится не эффективным для использования".
Преимуществом разделяемого кеша акселераторов является его нахождение в оперативной памяти. Случай свопинга не рассматриваем т.к. наличие свопинга говорит о неадекватной настройке хостинга. На производительной системе свопинга быть не должно. Вообще.
Недостатком - его полный сброс при перезапуске веб сервера.
1.
Использует уже имеющиеся механизмы разделяемой памяти. Предоставляя PHP программисту функции apc_fetch, apc_store и apc_delete.
Недостаток 1: использует общую для скриптов и кеша память.
Недостаток 2: при кешировании требуется сериализация данных.
2.
При сборке расширения необходимо указать "--with-eaccelerator-shared-memory".
Имеет те же недостатки, что и APC.
Достоинство: есть возможность настроить сохранение кеша на диск.
3. Кроме акселераторов, схожим, но гораздо более богатым функционалом обладает демон .
Это отдельный процесс использующий для коммуникаций протокол TCP/IP, который может поддерживать распределенный, разделяемый, синхронный кеш. К серверу на котором запущен memcached можно подключить более одного веб сервера. Использование memcached решает проблемы кеша акселераторов, но на первое место выходит штраф производительности из-за транспорта протокола.
На Ubuntu запустить memcached проще простого:
Установка:
aptitude install memcached |
настройки находятся в хорошо документированном файле:
/etc/memcached.conf |
Запуск:
/etc/init.d/memcached start |
Для PHP имеется три расширения для работы с сервером memcached. На данный момент Битрикс поддерживает "".
4 Настройка Битрикса:
Управление кешем реализуется через константы определяемые в файле dbconn.php
Самая важная "BX_CACHE_TYPE" может принимать следующие значения:
- files - использовать в качестве хранилища кеша диск. Это полностью совместимое поведение. При неудачных попытках включения других типов кеша будет использован именно этот тип.
- memcache - подключаться к memcached для сохранения кеша. Включится только приналичии загруженного расширения "memcache" и установлении соединения с сервером.
- eaccelerator - использовать в качестве хранилища разделяемую область памяти eAccelerator'а.
- apc - APC.
Пример:
define("BX_CACHE_TYPE", "memcache"); |
Вторая константа "BX_CACHE_SID".
Ее просто НЕОБХОДИМО определять, если на одном сервере запущено более одного Битрикса. Это соль которая будет подмешана ко всем ключам кеша. И позволит им "не перепутаться" (что я удивленный и наблюдал во время тестирования).
Пример:
define("BX_CACHE_SID", $_SERVER["DOCUMENT_ROOT"]."#01"); |
Третья константа нужна только при использовании memcache - "BX_MEMCACHE_HOST".
В ней определяется адрес сервера на котором запущен демон memcached.
Пример:
define("BX_MEMCACHE_HOST", "192.168.0.43"); |
И не обязательная "BX_MEMCACHE_PORT", по умолчанию принимает значение 11211.
Результаты тестирования довольно противоречивы. Однозначного плюса (как и минуса) не получил ни один из механизмов.
Пробуйте. Делитесь опытом. Давайте советы.
for now i did this by editing /bitrix/modules/main/classes/general/cache_memcache.php 8)