Главная > Open Source, PHP, Высокопроизводительная архитектура, Разное > Кёширование в памяти или как использовать memcached в разработке проектов на win32 платформе

Кёширование в памяти или как использовать memcached в разработке проектов на win32 платформе

28 октября 2007

Разрабатывая сложный проект на платформе РНР разработчик часто не может протестировать его сразу же, "не отходя от кассы", в частности потому, что некоторые расширенные возможности пока недоступны на основной платформе разработке (имеется ввиду Win32), или их очень сложно и нетривиально устанавливать. Приходится извращаться, применяя виртуальные машины под Linix/BSD, использовать выделенный виртуальных сервер у провайдера и тому подобных решения. К примеру, почти ни она серьёзная система не обходится без двух уже ставших классическими модулей - акселератора кода (такого как XCache, APC, eAccelerator, Zend Optimazer или Zend Platform) и какого-либо кёша. В большинстве высокопроизводительных систем, по данным авторитетного сайта HighScalability, применяется уже давно ставшие промышленным решением пакет memcached. Его, к примеру, применяют такие известные проекты, как Twitter, Livejournal, Wikipedia и другие. Но даже не претендуя на лавры таких масштабов, как поступить, если создаётся проект, которому также нужно использовать возможности кёширования? Если акселераторы уже давно имеют версии под разные платформы, и под Win32 также, то memcached ранее не имел такого порта, и был недоступен основной части разработчиков (кроме тех, кто мог покопаться в исходных кодах и собрать его под свою систему).

Честно сказать, я сам ещё год-полтора назад, впервые столкнувшись с необходимостью проверки работы и разработки скриптов с использованием memcached, то, к своему стыду, не нашёл порта под Win32. А буквально сегодня мне в RSS попала новость о статье, где рассказывалось о пошаговой разработке простой системы кёширования для веб-сайта, и упоминалось как раз про memcached. И что вы думали, действительно, в конце ещё 2006 года вышел неофициальный порт версии 1.2.1, правда в этом году уже вышла обновлённая и улучшенная версия 1.2.2, в частности, улучшена возможность многопоточной обработки, но её ещё не портировали. Впрочем, это сейчас не так уж существенно - потренироваться можно и на предыдущей версии.

А что же такое, собственно, этот самый memcached? Сейчас расскажем. memcached представляет собой модуль кёширования в оперативной памяти часто запрашиваемых данных и предоставляет прикладным программам простой API для различных операций над данными - вставку в кёш, перезапись, получение значение и т.п. В отличие от того же модуля для работы с разделяемой памятью, доступного в РНР, он требует гораздо меньше кода, который, к тому же проще, а сама система, хоть и использует тот же принцип, но намного совершенее и обкатана в условиях очень больших нагрузок большинством крупнейших веб-сайтов мира.

Если вы дочитали до этого момента и захотели попробовать - то вот вам пошаговое руководство к действию:

  • На веб-сайте http://jehiah.cz/projects/memcached-win32/ загружаем архив с программой.
  • Распаковываем его в любой удобный нам каталог. Я использую пакет Денвер, поэтому распаковал в d:\www\memcached
  • Устанавливаем кеш как служебный сервис, чтобы не думать о ручном запуске каждый раз (команда memcached.exe -d install)
  • Запускаем уже установленный пакет командой memcached.exe -d start
  • При необходимости (или желании) разобраться с другими командами, получаем их полный список с описаниями - команда memcached.exe -h. Из полезных:
    • -p ХХ, где ХХ - номер порта, указывает по какому порту будет доступен сервис. Изначально это 11211;
    • -s <FILE> - указывает на использование unix-сокета для связи (и не использовать сеть);
    • -l IP - указывает, к какому сетевому интерфейсу подключаться (IP-адрес);
    • -d restart - перезагрузка сервера
    • -m MEM - указывает, какое количество оперативной памяти использовать под кёш (изначально 64Mb)
    • -c ХХ - максимальное количество одновременных соединений (изначально 1024, для очень высоконагруженных систем поставить, наверное, большее значение, хотя без исследования конкретной ситуации не обойтись);
    • -vv - очень пригодится при отладке и экспериментах, указывает серверу выводить всю информацию про запросы, ошибки и ход выполнения;
    • -n ХХ - опция указывает на объем памяти (минимальный), который выделяется на хранения ключа, значения переменной и флага. Если у вас размер этого заведомо меньше (вы храните множество очень маленьких переменных), то имеет смысл уменьшить значение, что позволит одновременно хранить больше переменных в том же объёме памяти.
  • Проверить, установлен ли модуль для РНР - в каталоге расширений должен быть файл php_memcache.dll. Он не входит в стандартный дистрибутив PHP, но его можно найти в пакете PECL для вашей версии РНР. Примечание! Оказалось, установка модуля к РНР процедура ещё та. В пакете PECL, который распространяется к каждому дистрибутиву, есть такой модуль, но для моей рабочей версии 5.2.3 версия модуля была 5.3, и он совершенно отказывался подключатся - вернее все работало, просто этого модуля не было. Поэтому придётся лезть на сайт Pecl4Win и скачать оттуда под вашу версию РНР (кстати, и размер этого модуля будет меньше).
  • Подключить этот модуль, вписав строку extension=php_memcache.dll в файле php.ini, в секции, где описываются все подключаемые модули.
  • Перезапустить сервер (при запущенном memcached конечно) и просмотреть служебные данные РНР командой phpinfo(). Там должен быть раздел Memcached. Кстати, в отличие от акселераторов, memcached отлично работает совместно с дебаггерами, к примеру у меня с Xdebug v2.0.2-dev (конечно, напрямую сравнение неверное, все же это пакеты совсем разные, но все же).
  • Поздравляем, теперь вы можете использовать все возможности Memcached-а на вашей любимой Win32 машине!

Саму работу с пакетом из РНР мы описывать не будем, по крайней мере сейчас - честно, опыта у меня еще нету, поэтому поэкспериментирую самостоятельно и, потом, если будет интересно, опишу. А вы пока можете ознакомиться с материалами на эту тему от других авторов:

  1. 29 ноября 2007 в 11:43 | #1

    спасибо! отличный текст

  2. 29 июля 2008 в 13:45 | #2

    А почему вы пишете «кёш»? Это ведь не правильно. Правильно — «кэш».

  3. 5 марта 2009 в 13:52 | #3

    Спасибо за статью. Ти мог бы выслать мне на почту эту dll’ку, а то pecl4win уже более месяца недоступен и немогу нигде найти этот экстеншн.
    Заранее спасибо.

  4. 5 марта 2009 в 14:04 | #4

    http://abrdev.com/tmp/php_memcache.dll вот выложил ту библиотеку, что я использовал

  5. 11 сентября 2009 в 22:55 | #5

    Блин, скачал уже давно у тебя dll’ку, а отблагодарить забыл.

    Спасибо!

Комментирование отключено.