Включаем MemCache
MemCahed — это замечательная технология, которая позволяет кэшировать данные не на жесткий диск, а в оперативную память, которая быстрее во много-много раз. И если раньше MODX нужно было дружить с ней, то с версии 2.1 работа с MemCache уже включена в движок, и это нужно только активировать.
В принципе, операция не сложная, но есть один момент, из-за которого я и пишу этот топик.
Все операции, как обычно, написаны для сервера настроенного по этой инструкции.
Установка
Устанавливаем нужные пакеты:
Для нагруженных проектов еще можно задать оперативки побольше в /etc/memcached.conf.
Настройка MODX
Идем в системные настройки, находим cache_handler и ставим значение cache.xPDOMemCache.
И вроде бы все, как говорит нам rtfm. Да вот только если у вас на сервере больше одного сайта, и вы на них включили MemCache — начнутся зверские глюки. По умолчанию закэшированные данные от одного сайта будут выдаваться на всех.
Это происходит оттого, что MODX кэширует данные с одними и теми же ключами для разных сайтов. На форуме я решения не нашел, на rtfm тоже и тогда полез читать исходники.
Решение оказалось простым — нужно создать новый системный параметр cache_prefix, и вписать в него любую уникальную строку, чтобы разделить ключи кэша для разных сайтов. Авторы это предусмотрели, но не документировали.
Проверка
Смотрим в консоле статистику, обращаем внимание на get_hits и get_misses:
Заключение
Лично я на своих маленьких проектах особой скорости не заметил, зато получил экономию денег на оплате операций чтения\записи жесткого диска на облаке Selectel. А также теперь объем бэкапов будет поменьше — ибо файлов кэша почти нет.
В принципе, операция не сложная, но есть один момент, из-за которого я и пишу этот топик.
Все операции, как обычно, написаны для сервера настроенного по этой инструкции.
Устанавливаем нужные пакеты:
sudo apt-get install memcached php5-memcache libmemcached-tools
Перезагружаем php5-fpmsudo service php5-fpm restart
И на всякий случай memcachedsudo service memcached restart
Делаем phpinfo(), там должно быть видно, что memcache подключен.Для нагруженных проектов еще можно задать оперативки побольше в /etc/memcached.conf.
Настройка MODX
Идем в системные настройки, находим cache_handler и ставим значение cache.xPDOMemCache.
И вроде бы все, как говорит нам rtfm. Да вот только если у вас на сервере больше одного сайта, и вы на них включили MemCache — начнутся зверские глюки. По умолчанию закэшированные данные от одного сайта будут выдаваться на всех.
Это происходит оттого, что MODX кэширует данные с одними и теми же ключами для разных сайтов. На форуме я решения не нашел, на rtfm тоже и тогда полез читать исходники.
Решение оказалось простым — нужно создать новый системный параметр cache_prefix, и вписать в него любую уникальную строку, чтобы разделить ключи кэша для разных сайтов. Авторы это предусмотрели, но не документировали.
Проверка
Смотрим в консоле статистику, обращаем внимание на get_hits и get_misses:
memcstat --server=127.0.0.1
Еще прикольно почистить у сайтов /core/cache/ и увидеть, что файлов с ресурсами там больше не появляется. Теперь они все в оперативной памяти.Заключение
Лично я на своих маленьких проектах особой скорости не заметил, зато получил экономию денег на оплате операций чтения\записи жесткого диска на облаке Selectel. А также теперь объем бэкапов будет поменьше — ибо файлов кэша почти нет.
Комментарии: 32
Приветствую! На вашем сайте на странице «Работа с кэшерами в Revolution» написано следующее
«cache.xPDOMemCached — обработчик для memcached. Есть заметка про него
cache.xPDOMemCache — обработчик для memcache.»
В этой же статье вы устанавливаете MemCahed значит в конфигах нужно прописывать cache.xPDOMemCached, а вы же написали «ставим значение cache.xPDOMemCache». Кто ошибся?
Если я то объясните почему, если не сложно. Спасибо.
«cache.xPDOMemCached — обработчик для memcached. Есть заметка про него
cache.xPDOMemCache — обработчик для memcache.»
В этой же статье вы устанавливаете MemCahed значит в конфигах нужно прописывать cache.xPDOMemCached, а вы же написали «ставим значение cache.xPDOMemCache». Кто ошибся?
Если я то объясните почему, если не сложно. Спасибо.
Не объясню, ибо сам не понимаю между ними разницы.
Используйте лучше php-apc =)
Используйте лучше php-apc =)
Тогда еще один вопрос. Если на сайте стоит стандартная система кэширования в файлы, весь кэш весит к примеру 2 гб. а я хочу что бы кэшировалось в память, то чем лучше пользоваться MemCahed или php-apc? (сервер мощный).
Вот честно, не знаю. Одно могу сказать, что php-apc кэширует компилированный php, экономя этим память, а memcache — нет.
Потестируйте и то и другое, а потом расскажите нам =)
Потестируйте и то и другое, а потом расскажите нам =)
Здравствуйте!
Жаль, что не напал на серию Ваших мануалов раньше.
Решил поднять сайт на Revo без Apache на VPS от Hetzner.
Собирал Nginx, php-fpm, MySQL, Memcached, но по другому мануалу и сейчас имею проблемы с кешированием.
В связи с этим мой вопрос: при подключении memcached в Modx, обязательно ли менять настройки в php.ini с тех, что стоят по-умолчанию:
session.save_handler = files
; session.save_path = «N;/path»
на, к примеру, вот такие (найденные на просторах интернета):
session.save_handler = memcache
; change server:port to fit your needs…
session.save_path=«tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15»
Извините, что издалека.
Жаль, что не напал на серию Ваших мануалов раньше.
Решил поднять сайт на Revo без Apache на VPS от Hetzner.
Собирал Nginx, php-fpm, MySQL, Memcached, но по другому мануалу и сейчас имею проблемы с кешированием.
В связи с этим мой вопрос: при подключении memcached в Modx, обязательно ли менять настройки в php.ini с тех, что стоят по-умолчанию:
session.save_handler = files
; session.save_path = «N;/path»
на, к примеру, вот такие (найденные на просторах интернета):
session.save_handler = memcache
; change server:port to fit your needs…
session.save_path=«tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15»
Извините, что издалека.
Ничего не нужно, Revolution работает с сессией и кэшем самостоятельно.
Василий, спасибо за ответ.
Попробовал применить — проблема оказалась не в этом.
Буду очень Вам благодарен, если сможете натолкнуть на мысль:
есть сайт qbk.com.ua/
работает на сервере, сконфигурированном по мануалу howitmake.ru/blog/ubuntu/80.html (все кроме виртуального хоста, он адаптирован под MODx).
Есть основная проблема с работой сессии: товары могут сами выпадать из корзины при переходе на другую страницу, залогиненный пользователь не может разлогиниться.
Кроме того, в админке не хочет работать TinyMce (не уверен, что это как-то взаимосвязано).
Что MODx может не нравиться?
PS я понимаю, что не очень красиво такое спрашивать, т.к. использовал не Ваш мануал и скрипт магазина. Как я уже говорил, немного поздно нашел Ваш блог.
Попробовал применить — проблема оказалась не в этом.
Буду очень Вам благодарен, если сможете натолкнуть на мысль:
есть сайт qbk.com.ua/
работает на сервере, сконфигурированном по мануалу howitmake.ru/blog/ubuntu/80.html (все кроме виртуального хоста, он адаптирован под MODx).
Есть основная проблема с работой сессии: товары могут сами выпадать из корзины при переходе на другую страницу, залогиненный пользователь не может разлогиниться.
Кроме того, в админке не хочет работать TinyMce (не уверен, что это как-то взаимосвязано).
Что MODx может не нравиться?
PS я понимаю, что не очень красиво такое спрашивать, т.к. использовал не Ваш мануал и скрипт магазина. Как я уже говорил, немного поздно нашел Ваш блог.
На 99% уверен в том, что вы используете ускоритель php на сервере и не выставили верный кэшер.
Если все выставлено как надо — попробуйте просто отключить memcache\php-apc. Если проблема исчезнет — крутите настройки хостинга.
Если все выставлено как надо — попробуйте просто отключить memcache\php-apc. Если проблема исчезнет — крутите настройки хостинга.
выставил обработчик cache.xPDOMemCached и возник вопрос:
а куда phpthumbof будет кешировать картинки?
и как теперь вообще этот кеш из памяти удалить? Очистить кеш сайта не помогает… во встрял)
а куда phpthumbof будет кешировать картинки?
и как теперь вообще этот кеш из памяти удалить? Очистить кеш сайта не помогает… во встрял)
кеш гронул — параметры обратно вернул, вроде все наладилось.
так где храниться кеш картинок — тоже в памяти?
так где храниться кеш картинок — тоже в памяти?
Кэш ресурсов храниться в памяти, да и не все настройки хранятся в кэше памяти, некоторые остаются в папке /core/cache.
почитал статью, стало интересно(на timeweb включен memcache). вот решил попробовать, грузиться стало быстрее, только одно но — там где обработчиком для картинок стоит phpthumbof изображений нет.
и даже если внести изменения в ресурс, то страница все равно грузиться из кеша.
так как мне заставить ее обновиться? какое время храниться этот кеш? как его очистить? Вообще нужна эта затея на шаред хостинге
спасибо!
и даже если внести изменения в ресурс, то страница все равно грузиться из кеша.
так как мне заставить ее обновиться? какое время храниться этот кеш? как его очистить? Вообще нужна эта затея на шаред хостинге
спасибо!
Не знаю, шаред хостингами уже более двух лет не пользуюсь =)
После того, как установили обработчик, создали префикс, заходите в папку /core/cache и удаляете всё содержимое. А затем, в админке «очисить кэш».
У меня с php-apc всё молниеносно грузится.
После того, как установили обработчик, создали префикс, заходите в папку /core/cache и удаляете всё содержимое. А затем, в админке «очисить кэш».
У меня с php-apc всё молниеносно грузится.
спасибо! грохнуть кеш после изменения параметра я и забыл! сейчас все заработало… посмотрю будет ли толк.
Толька не будет на шареде — глянул нагрузку свою она у меня за 50 cp уже вылезает/ отключат щас нафик
Толька не будет на шареде — глянул нагрузку свою она у меня за 50 cp уже вылезает/ отключат щас нафик
Знаете, для чего используется кэш? На больших нагрузках ощутите всю прелесть. А шаред хостинги — ну не понимаю, зачем они нужны =)
да мне пока с познавательной целью, ради интереса / подскажите еще как загрузку памяти посмотреть?
Зависит от ОС. Это информации в интернете полно, гугл в помощь :)
мне загрузку увидеть как допустим на этой странице, если я снипет вот такой вызову я правильно увижу потребление памяти?
function getStatus($text = '') {
global $memory_start;
static $microtime_start = null;
if ($microtime_start === null) {$time = 0;}
else {$time = microtime(true) - $microtime_start;}
$memory = memory_get_usage();
if (!empty($memory_start)) {
$memory2 = number_format(($memory - $memory_start) / 1024, 2,","," ");
$memory2 = " ($memory2 Кб.)";
} else {$memory2 = '';}
$memory = number_format($memory / 1024, 2,","," ");
echo $text.'
memory: '.$memory.' Кб.'.$memory2.'
';
$microtime_start = microtime(true);
}
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
getStatus('');
$memory_start = memory_get_usage();
выставил cache.xPDOAPCCache — потребление памяти упало процентов на 30, сайт стал пошустрее…
подскажите по времени хранения кеша? например все ресурсы я закешировал вчера, сегодня захожу на сайт а он не из кеша грузит… Где задать вот это время жизни кеша?
подскажите по времени хранения кеша? например все ресурсы я закешировал вчера, сегодня захожу на сайт а он не из кеша грузит… Где задать вот это время жизни кеша?
Привет! Парни а кто нибудь пробовал nginx забирать страницы из memcache?
Он ведь позволяет это делать через set $memcached_key.
Подскажите в каком формате формирует ключ modx для memcache? или где это можно посмотреть?
Он ведь позволяет это делать через set $memcached_key.
Подскажите в каком формате формирует ключ modx для memcache? или где это можно посмотреть?
public function set($key, $var, $expire= 0, $options= array()) {
$set= $this->memcached->set(
$this->getCacheKey($key),
$var,
$expire
);
return $set;
}
я так понимаю вот этот блок ключ задает?
resource/cache_prefix_context/resources/id
но тут помимо html еще что то отдает и в итоге не страница а мусор(
но тут помимо html еще что то отдает и в итоге не страница а мусор(
не знал про такой плагин, но он просто для nginx складывает кэшированные страницы в определенной папке и все.
чисто для статики очень неплохо.
с memcache же можно время жизни для странички задать, ну и вообще это уже не совсем статика будет…
чисто для статики очень неплохо.
с memcache же можно время жизни для странички задать, ну и вообще это уже не совсем статика будет…
Ну а тут-то, конечно, никак нельзя страницы обновлять. Один раз положил — и навсегда, пока сервер не сломается.
Удачи в ковыряниях.
Удачи в ковыряниях.
что с сайтом??? joxi.ru/Y2L6nKnu9wG7dr
Многие заметки изначально были написаны на bezumkin.ru, и перенесены сюда вместе с датами и комментариями.
Так что, с сайтом всё в порядке.
Так что, с сайтом всё в порядке.
Не, я про то что на всех страницах были новости не новее 2012 года, сейчас вроде всё норм, а вот на сайте file.modx.pro/ и сейчас какойто глюк, авторизоваться нельзя
Видимо, из-за срочных обновлений MODX. Я сейчас везде ставлю свежий pdoTools.
Авторизацию сейчас поправлю.
Авторизацию сейчас поправлю.
Проблема обнаружилась сегодня, точнее она и раньше переодически возникала, но на этом все и останавливалось.
В общем на сайте используется MemCache не знаю на сколько именно в нем проблема, но думаю что из за него:
Вносишь изменения в файл через редактор modx а оно не применяется. После попыток отчистить кэш, нескольких попыток изменить файл, обновить страницу и всяческие другие операции изменение может примениться а может и нет.
То есть не понятно когда применяется изменения а когда нет. В файле то все меняется, но отдается старая версия файла при запросе к нему.
Возможно кто подскажет есть какое то решение?
В общем на сайте используется MemCache не знаю на сколько именно в нем проблема, но думаю что из за него:
Вносишь изменения в файл через редактор modx а оно не применяется. После попыток отчистить кэш, нескольких попыток изменить файл, обновить страницу и всяческие другие операции изменение может примениться а может и нет.
То есть не понятно когда применяется изменения а когда нет. В файле то все меняется, но отдается старая версия файла при запросе к нему.
Возможно кто подскажет есть какое то решение?
Есть такое
1Mb cache entry limitation
Most cache entries in MODX will never get this large. But if you have tens of thousands of Resources, you may want to exclude Context Settings from using memcached, because if your Context cache entry is larger than 1Mb, it will not be cached at all, and will be loaded from the database on each request. Similar could occur with very large cacheable Resources or huge database result sets. It's not something that will affect many, but those with very large MODX sites should definitely be aware of the possibility.
у меня похоже эта ситуация, в связи с чем подскажите как исключить Context Settings из memcached в сторону файлового кэша например
@Василий Наумкин Добрый день. Подскажите, не знаете ли вы как подключить сайт к redis.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.