Настройка memcached для кеширования сессий


Продолжая разговор о необходимых решениях для высоко нагруженных проектов, я перехожу непосредственно к первому такому решению. Речь сегодня пойдет о memcached и его настройке. Так же мы рассмотрим что еще можно делать со свободной памятью, кроме хранения данных активной сессии.

Итак, для чего же служит memcached? Все просто, если вы все чаще замечаете, что на рабочем сервере остается неиспользованная оперативная память, то можно использовать ее более полезно, чем просто хранить в резерве. Для этого нам и необходим memcached, фактически, это хранение временной информации (кэша) в оперативной памяти. Зачем? А за тем, что скорость доступа к информации в ОЗУ просто несоизмеримо выше, чем у вашего рэйда.

Таким образом, использование memcached позволяет быстро работать с данными, которые всегда нужны «под рукой» и уменьшать время, в течении которого расходуются ресурсы на выполнение операции.

Ничего особенного в установке и настройке memcached нет. Ставится все будет из репозиториев, а потому:

И все. Демон уже запущен. Стандартный конфиг (/etc/memcached.conf) запускает memcached на порту 11211, с 64M памяти. Но часто, для проектов, которые активно используют ОЗУ, одного порта не достаточно. В таких случаях можно запускать дополнительные воркеры с такими объемами памяти, какие вам необходимы. Делается все просто.

Итак, тут мы получаем еще одного воркера c 64Мб памяти, висящего на порту 11212. Все это, естественно, на 127.0.0.1. Для того, чтобы получать нужное кол-во воркеров и после перезагрузки сервера, нет нужды писать bash-скрипт. Можно просто и банально прописать команды в /etc/rc.local, расположив их до строки exit 0.

Теперь нам надо «научить» работать со всем этим делом php. Для чего нам потребуется экстеншн memcache. Получить его можно через pecl.

Вот такие нехитрые операции, после которых нам осталось сделать последнее — завернуть в php.ini все сессии в memcached.

Ищем строку

И заменяем ее на следующее.

После чего все так же перезапускаем Apache. Готово, теперь наши сессии хранятся в памяти и их можно «дергать» сколько угодно в вашем проекте, не опасаясь нагрузки на дисковую подсистему.

Кроме того, в memcached можно хранить практически любую информацию, не только сессии. В php есть специальный встроенный класс Memcache. Для хранения информации в кэше нам необходимо передавать три значения, а именно: ключ, данные и время жизни кэша. Давайте попробуем сохранить строку базы данных, например.

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


  • Dmitry

    Да, только после этой операции нарушается авторизация на таких движках, как друпал и xenforo. Подозреваю, что это как-то связано с несовпадением куки и сессий

    • Безусловно, стоит принимать во внимание то, что у некоторых приложений могут быть свои механизмы для работы с сессией. Я не знаток этих двух движков, но, думаю, там точно есть нюансы в обработке и сессий и кукисов.