Добавляем поддержку xcache в 0.3.1

Сохраняем framework.zend.com/svn/framework/standard/trunk/library/Zend/Cache/Backend/Xcache.php в каталог classes/lib/external/DklabCache/Zend/Cache/Backend

Редактируем classes/modules/sys_cache/Cache.class.php, или, можно просто создать папку Cache в каталоге classes/modules и скопировать туда Cache.class.php из sys_cache. Так как сначала идет проверка наличия класса в папке Cache, а потом уже в sys_cache — это сработает.

После
define('SYS_CACHE_TYPE_MEMORY','memory');
добавляем
define('SYS_CACHE_TYPE_XCACHE','xcache');


Перед
} else {
			throw new Exception($this->Lang_Get('system_error_cache_type').": ".$this->sCacheType." (file, memory)");
		}
добавляем дополнительну проверку
} elseif ($this->sCacheType==SYS_CACHE_TYPE_XCACHE) {
			require_once('Zend/Cache/Backend/Xcache.php');
			$oCahe = new Zend_Cache_Backend_Xcache(array());
			$this->oBackendCache = new Dklab_Cache_Backend_TagEmuWrapper(new Dklab_Cache_Backend_Profiler($oCahe,array($this,'CalcStats')));
		

В config/config.php прописываем
define('SYS_CACHE_TYPE','xcache')


Теперь кроме memory и file, LS поддерживает и xcache.

23 комментария

avatar
Отличная новость, всегда считал, что дополнительно гонять трафик, по сети накладно. Так что memcache не наш метод, есть лишние телодвижения…
avatar
Ну это кому как нравится :) Я предпочитаю xcache.
avatar
а расскажите чем хорош xcache?
avatar
Xcache — это opcode cache, ускорялка пхп. Xcache «компилирует» файлы для быстрого выполнения в PHP и держит их в памяти для быстрой загрузки. В нем также есть API для кэширования. Если стоит xcache, я считаю излишним ставить memcache, т.к. функции memcache по кэшированию можно возложить на xcache.

Что же касается того, чем он лучше других «ускорялок» пхп, то это холиварная тема :) Тут уж кому как нравится. Я сначала пользовался turck mmcache, потом eaccelerator-ом, теперь вот перешел на xcache. Потому что перспективы развития eaccelerator на мой взгляд туманны, достаточно посмотреть на то, что они отказались от API в новых версиях.
avatar
Заметьте, там в конце не хватает закрывающего тега пхп. Не забудьте добавить ?> в конце.
Это не ошибка, а Зендовский стандарт. Они рекомендуют не ставить закрывающий тег, т.к. пхп это нормально хавает, а программера навсегда избавляет от ошибки «концевого пробела»
avatar
Спасибо, я просто видимо далек от зедовских стандартов :)
avatar
Возможно ли на шаредхостинге использовать xcache? Насколько это будет эффективнее filecache?

Т.к. на шареде приходится за невозможностью memcache, использовать filecache.
  • dred
  • 0
avatar
Только если хостер установил на сервере xcache.
Или есть возможность его самостоятельной установки по ssh (например есть на nic.ru)
avatar
Насколько это будет эффективнее filecache?

Кеш будет в памяти, а не на диске. Со всеми вытекающими, плюс:
Xcache «компилирует» файлы для быстрого выполнения в PHP и держит их в памяти для быстрой загрузки.

Будет сразу заметно… Так как скрипты не будут каждый раз компилироваться и не будет накладных расходов, виде диска, в случаи filecache или tcp в случаи memcache.

ЗЫ: Хотя можно включить, чтобы кеш был на диске…
avatar
Немного не понял:
ЗЫ: Хотя можно включить, чтобы кеш был на диске…
avatar
Кеш может быть, как в памяти аля memcache, так и в отдельном каталоге, как в filecache. Есть еще вариант с кешем в R/O, но как в случаи с каталогом, не использовал, даже документацию одним глазом смотрел, поэтому насчет xcache могу и ошибатся, но в turck mmcache и eaccelerator кеш на диске 100% был.
avatar
Не знаю правда или нет, но у меня были проблемы на VPS с Xcache. Вот фрагмент переписки с саппортом:
Я К сожалению eaccelerator почему то не работает. Если раскомментить его строки в php.ini то обращение к сайту выдает 502 Bad Gateway.
Саппорт Исправлено, был конфликт eAccelerator c XCache, их нельзя использовать совместно.
Если это действительно так, то нужно учитывать и выбирать что лучше.
avatar
Ничего удивительного, это как, если бы вы в одну машину посадили двух водителей и они начали бы управлять ей одновременно, один вправо, другой влево, а машина в итоге едет вперед. По сути eAccelerator и XCache делают одно и тоже, разница лишь в фичах и подходе в их реализации… Если я правильно помню, на сегодняшний день по фичам eAccelerator лидирует на одну важную, это оптимизация криво написанного кода. Но у него(eAccelerator) нету потенциала, поскольку это всего лишь форк turck mmcache, который уже давно не развивается. В новой версии eAccelerator будут убраны все важные фичи и это не перво апрельская шутка, объяснить это просто, потенциал заложенный в turck mmcache иссяк, разработчики просто не смогли подружить его с версий 5.3 и 6.х. Поэтому, если версия PHP ниже 5.3.х, то eAccelerator пока лучше, но если метить в будущие и не хочется потом переписывать или писать врайпер, для взаимодействия с API, лучше сразу использовать XCache, ведь тесты показывают, что по скорости они идут практически один в один и выигрыш одного или другого, на глаз будет, не заметен.

Если я верно помню, когда появился XCache его разработчик сам рекомендовал использовать его продукт как дополнение к eAccelerator, но с тех пор много воды утекло. Сам я никогда не пробовал запускать их одновременно, не вижу смысла. Учитывая ошибку 502 Bad Gateway, могу предположить, что могла быть ошибка в конфиге и поэтому бэкэнд сервер не отвечал фронтэнд серверу, он просто не запускался.

Поскольку у вас уже используется XCache, менять шило на мыло не стоит. Продолжайте использовать этот замечательный продукт.
avatar
Я как-то тестировал APC в сравнении с memcache и APC выиграл всухую по скорости. В целом использовать хранение кеша таким образом полностью оправдано. Единственное, что в PHP 5.3 уже встроено как я понимаю кеширование опкода и для меня пока остается открытым вопрос о смысле использования ускорителей в будущем.
  • Carw
  • 0
avatar
Еще бы он не выиграл. Они ведь кешируют разные вещи, грубо говоря, APC кеширует, то что выводит данные, а memcache кеширует эти данные. Но они хороши в паре, ибо по сути APC+memcache и есть XCache. Смысл ставить две штуки если можно поставить одну? :-) Да еще и по tcp или через сокед операций не будет…

Когда я смотрел APC, а это было очень давно, эффект он давал только на самом большом уровне кеширования, но при это если файл изменялся, он не замечал этого и выдавал не актуальный вариант, поэтому я его не юзаю…
avatar
Стоп-стоп. APC как раз умеет хранить пары ключ-значение. Поэтому APC+memcache в целом не нужно.
avatar
Ну я же написал, что смотрел его очень давно. Но впечатление он у оставил только негативное. Сейчас же, перед тем как писать, я глянул его сайт и он опять меня не впечатлил, списка фич нету, Introduction который мог бы за него сойти, пуст.

ЗЫ: может конечно пропустил и не заметил, но это очень важная часть в таких продуктах…
avatar
Не сильно следил за этим, но по некоторым сведеньям именно APC разработчики PHP собирались внести в состав PHP :-))

Впрочем это вопрос отдельный уже. Самое главное, что кроме memcache хватает еще хороших инструментов для кеширования.
avatar
Я что-то не догоняю. Сначала «Xcache — это opcode cache...», а потом «Если стоит xcache, я считаю излишним ставить memcache». Но мемкеш-то ведь другим занимается — он кеширует данные, а вовсе не пхп-скрипты. Или Xcache делает и то, и другое?
avatar
xcache делает и то и другое :) У него есть API для кэширования переменных.
avatar
Не подскажете как добавить поддержку xcache в админпанель от avadim? Не получается очистить кэш из админпанели. Выдает Fatal error: xcache_clear_cache() [http://xcache.lighttpd.net/wiki/InstallAdministration]: xcache.admin.user and/or xcache.admin.pass settings is not configured. Make sure you've modified the correct php ini file for your php used in webserver. in /......./classes/lib/external/DklabCache/Zend/Cache/Backend/Xcache.php on line 185
Я понимаю, что нужно где то задать xcache.admin.user и xcache.admin.pass но вот где их задать? Буду очень благодарен если кто подскажет как настроить. Спасибо.
avatar
xcache.admin.user и xcache.admin.pass задаются в php.ini…
комментарий был удален
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.