Включаем 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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
«cache.xPDOMemCached — обработчик для memcached. Есть заметка про него
cache.xPDOMemCache — обработчик для memcache.»
В этой же статье вы устанавливаете MemCahed значит в конфигах нужно прописывать cache.xPDOMemCached, а вы же написали «ставим значение cache.xPDOMemCache». Кто ошибся?
Если я то объясните почему, если не сложно. Спасибо.
Используйте лучше php-apc =)
Потестируйте и то и другое, а потом расскажите нам =)
Жаль, что не напал на серию Ваших мануалов раньше.
Решил поднять сайт на 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»
Извините, что издалека.
Попробовал применить — проблема оказалась не в этом.
Буду очень Вам благодарен, если сможете натолкнуть на мысль:
есть сайт qbk.com.ua/
работает на сервере, сконфигурированном по мануалу howitmake.ru/blog/ubuntu/80.html (все кроме виртуального хоста, он адаптирован под MODx).
Есть основная проблема с работой сессии: товары могут сами выпадать из корзины при переходе на другую страницу, залогиненный пользователь не может разлогиниться.
Кроме того, в админке не хочет работать TinyMce (не уверен, что это как-то взаимосвязано).
Что MODx может не нравиться?
PS я понимаю, что не очень красиво такое спрашивать, т.к. использовал не Ваш мануал и скрипт магазина. Как я уже говорил, немного поздно нашел Ваш блог.
Если все выставлено как надо — попробуйте просто отключить memcache\php-apc. Если проблема исчезнет — крутите настройки хостинга.
а куда phpthumbof будет кешировать картинки?
и как теперь вообще этот кеш из памяти удалить? Очистить кеш сайта не помогает… во встрял)
так где храниться кеш картинок — тоже в памяти?
и даже если внести изменения в ресурс, то страница все равно грузиться из кеша.
так как мне заставить ее обновиться? какое время храниться этот кеш? как его очистить? Вообще нужна эта затея на шаред хостинге
спасибо!
После того, как установили обработчик, создали префикс, заходите в папку /core/cache и удаляете всё содержимое. А затем, в админке «очисить кэш».
У меня с php-apc всё молниеносно грузится.
Толька не будет на шареде — глянул нагрузку свою она у меня за 50 cp уже вылезает/ отключат щас нафик
подскажите по времени хранения кеша? например все ресурсы я закешировал вчера, сегодня захожу на сайт а он не из кеша грузит… Где задать вот это время жизни кеша?
Он ведь позволяет это делать через set $memcached_key.
Подскажите в каком формате формирует ключ modx для memcache? или где это можно посмотреть?
но тут помимо html еще что то отдает и в итоге не страница а мусор(
Есть специальные решения, когда страницы сохраняются в html, например вот StatCache.
чисто для статики очень неплохо.
с memcache же можно время жизни для странички задать, ну и вообще это уже не совсем статика будет…
Удачи в ковыряниях.
Так что, с сайтом всё в порядке.
Авторизацию сейчас поправлю.
В общем на сайте используется MemCache не знаю на сколько именно в нем проблема, но думаю что из за него:
Вносишь изменения в файл через редактор modx а оно не применяется. После попыток отчистить кэш, нескольких попыток изменить файл, обновить страницу и всяческие другие операции изменение может примениться а может и нет.
То есть не понятно когда применяется изменения а когда нет. В файле то все меняется, но отдается старая версия файла при запросе к нему.
Возможно кто подскажет есть какое то решение?
у меня похоже эта ситуация, в связи с чем подскажите как исключить Context Settings из memcached в сторону файлового кэша например