Кеширование

Уважаемые гуру, помогите пожалуйста с настройкой кеширования. Перешел на php 5.6, там я так понял встроенный opcache работает. Нужно ли установить еще какое то кеширование на VPS или нет? Memcache и Xcache расширения в панели ispmanager присутствуют. Если не нужно, то в конфиге включаем кеширование и по умолчанию ставим тип file так? Или все таки лучше memcache или Xcache? Кто в этой теме продвинут помогите пожалуйста.

13 комментариев

0
Opcache — это механизм кеширования байт-кода. PHP-код перед выполнением сначала компилируется (преобразуется) в байт-код, а потом только выполняется. В старых версиях PHP компиляция выполнялась каждый раз при загрузке PHP-скрипта. Если же включен Opcache, то когда требуется выполнить PHP-скрипт, он загружается, компилируется и байт-код сохраняется в памяти. И при повторном запросе уже скомпилированного PHP-файла байт-код сразу берется из памяти и выполняется.

В настройках же движка речь идет о кешировании данных. Например, при выводе на странице топика он запрашивается из базы со всеми сопутствующим реквизитами (автор, блог, теги и т.д.). И если кеширование данных в движке включено, то этот топик сохраняется в кеше и при повторном его просмотре он не будет запрашиваться из базы, а движок достанет его из кеша, что будет гораздо быстрее. Поэтому топик, который был сохранен в кеше, отобразится гораздо быстрее.

Короче: даже если есть Opcache, то кеширование данных все равно лучше включить. Memcache или Xcache — это тестировать надо, что быстрее и стабильнее будет работать.
0
Понятно… везде по разному пишут. Вот например
«Однако OPcache не поддерживает хранение пользовательских данных, как следствие дополнительно необходимо ставить xCache с отключенным opcode-кэшированием, APCu или memcached.»
Фактически в настоящий момент можно выбирать между xCache и OPcache + APCu. Хотя, как показывают тесты, OPcache быстрее xCache примерно на 10% и обеспечивает чуть меньшую нагрузку на процессор, мной был выбран xCache из-за актуальности, наличия админки и комплектности.
Получается, что если я поставлю Xcache то придется вырубить OPcache…
debian-help.ru/web-servers/ustanovka-xcache-iz-ishodnih-kodov-v-debian-7/

Также получается что xcache тоже компилирует php код, только наверное еще и данные...
«Кешеры байткода, такие как OpCache, APC или Xcache делают такой перевод только однажды – во время первого запуска скрипта. Потом прекомпилированный скрипт хранится в памяти, что значительно ускоряет работу.»
devloft.net/php/opcache-v-php-chto-eto-i-zachem-nuzhno.html

Получается что xcache делает то же самое что и opcahe плюс еще кеширует пользовательские данные (то что мы указываем в конфиге). Нахрена тогда он (opcache) встроен в php 5.6 если он только кеширует скрипты без данных… Просто хочется точно знать чтобы избежать гемора. Мне поддержка хостинга говорит что достаточно только opcache и больше ничего не надо, другие пишут что использование 2-х или более систем кеширования приведет к каким то коллизиям…
Отредактирован:
0
А точно понять, сдается мне, можно только на основе собственного опыта. Ибо на разных версиях под разными ОС да на разном железе да с разными настройками можно получить разные результаты.

Но я бы заюзал опкеш с мемкешем.
0
это на основе опыта совет?
0
Нет, под 5.6 я только тестировал, но реальных проектов на пхп 5.6 нет у меня. Поэтому это даже не совет, а просто высказывание, каким путем я лично пошел бы, если б запускал проект под 5.6
0
Общаюсь с поддержкой хостинга на эту тему. Пробую установить xcache 3.2.0. О результатах отпишусь сюда попозже.
0
Короче хостер выключил opcache сказав, что он совместно с xcache не работает. Кто нибудь знает что нибудь о совместной работе кешеров? Если да то помогите пожалуйста разобраться.
0
Короче так до конца я и не разобрался. Много общался с поддержкой хостинга… или я такой тупой:) или у них там кто как хочет так и дрочет… Привожу концовку переписки:
Я:
Я так и не понял учитывая что opcache не поддерживает хранение пользовательских данных, а кеширует только сами скрипты может есть смысл настроить совместную работу opcache и memcache. Просто в движке (Livestreet или Altocms) там задается вид кеширования конкретно для движка, как я уже писал ранее это: file (файловый кеш), memcache (используется memcache), xcache (используется xcache). То что в php 5.6 уже встроен кешер opcache это понятно, он работает на всем сервере на любых php скриптах. А хочется ускорить работу конкретного сайта и задействовать предусмотренные именно в движке методы кеширования данных. Если opcache совместно с xcache не работает то можно ли настроить memcache? Выше мне ответили, что memcache работает совместно. Помогите пожалуйста настроить тогда совместную работу Opcache и memcache. Правда я что то еще слышал про apcu. Чтобы было понятно что я вам «выношу мозг»:) я хочу чтобы кешировались php скрипты через штатный opcache и работал нормальный (не файловый) кеш данных в движке сайта.
Ответ:
Xcache, APC, opcache, eaccelerator — всё это PHP-акселераторы, которые кэшируют байт-код на сервере. По-умолчанию настройки таковы, что кэшируется весь PHP-код, выполняемый на сервере, а не для каких-то конкретных сайтов. В коде самого сайта никаких упоминаний про акселератор можно не оставлять — код всё равно будет кэшироваться. Поэтому мы не знаем, что означает, например, настройка «xcache» в параметрах CMS.

Memcache — это НЕ PHP-акселератор. Работа с ним должна быть явно определена в коде сайта, иначе смысла в нём нет.

Memcache может работать совместно с любым PHP-акселератором. Работа же двух акселераторов одновременно будет приводить к ошибкам.

Вроде все понятно. Тогда получается что, нужно оставить штатный opcache который встроен в php 5.6 ну и memcache имеет смысл включить. Оно же быстрее будет чем файловый кеш работать так?

Фрагмент конфига я показывал поддержке, но тем не менее они говорят
Memcache — это НЕ PHP-акселератор. Работа с ним должна быть явно определена в коде сайта, иначе смысла в нём нет.

Вадим, подскажи пожалуйста как ты понимаешь всю эту кухню и определена ли работа с memcache в коде Alto?
0
Ну, в общем-то все верно тебе ответили: кеширование байт-кода и кеширование данных по запросу — это разные задачи. Первая решается на уровне серверного софта, вторая — на уровне движка. И в Альто это есть.

определена ли работа с memcache в коде Alto?
Разумеется, задаешь в конфиге:
$config['sys']['cache']['use'] = 'memory';
… и включается кеширование данных с помощью Memcache. Возможно, нужно будет еще задать имя хоста и порта для работы с мемкеш:
$config['memcache']['servers'][0]['host'] = '127.0.0.1';
$config['memcache']['servers'][0]['port'] = '11211';
И если несколько сайтов используют мемкеш-хранилище, то нужно еще для каждого из них свой префикс кеша задать:
$config['sys']['cache']['prefix'] = 'alto_cache';
0
Спасибо Вадим. Вот первая строка и последняя я так понял это в основном конфиге движка прописываются. А вот эти две средние строки:
$config['memcache']['servers'][0]['host'] = '127.0.0.1';
$config['memcache']['servers'][0]['port'] = '11211';

Их где прописать? В config.local.php или еще где?
0
Все (подчеркиваю — ВСЕ!) изменения основного конфига нужно выполнять ТОЛЬКО в app/config/config.local.php.
0
Еще хочется услышать мнение разработчиков на вот это:
Поэтому мы не знаем, что означает, например, настройка «xcache» в параметрах CMS.
0
Насчет XCache ничего толком сказать не могу. В ЛС класс работы с ним включили из фреймворка Zend, и в оно в Альто перешло как есть. Но сам я не использовал (а мемкеш юзал)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.