Здравствуй, дорогой посетитель. Данная статья об установке системы кэширования memcached, которая пригодится владельцам виртуальных выделенных серверов (VDS).
Да будет кэш!
В наши дни кэш или кэширование встречается повсеместно в электронных устройствах, архитектурах ПО: процессорные кэши разных уровней, оперативная память, буферы жестких дисков и операционных систем и т.д… вплоть до буферизации в автомагнитоле.
Почему же кэшу сопутствует такой успех? Здесь все дело в локальном принципе: ПО устройства свойственно работать с данными из одной области. В случае оперативной памяти, если программа работает с данными по адресу 51, то, вероятнее всего, следующий запрос будет по адресу 52, 53 и т.д., а не 178. В случае с жестким диском, его буфер заполняется данными из соседних секторов по отношению с данными, использующимися в данный момент.
Относительно Web-проектов успех кэширования заключается в том, что на сайте всегда есть более популярные страницы, некоторые данные используются не только на одной странице, то есть существуют данные, которые используются гораздо чаще и являются более востребованными, чем остальные. И когда мы заменяем несколько обращений к бэкенду на одно обращение в кэш, затем все последующие обращения будут отдаваться с кэша.
Memcached представляет собой огромную хэш-таблицу в оперативной памяти, доступную по сетевому протоколу. Он обеспечивает сервис по хранению значений, ассоциированных с ключами. Доступ к хэшу мы получаем через простой сетевой протокол, клиентом может выступать программа, написанная на произвольном языке программирования (существуют клиенты для C/C++, PHP, Perl, Java и т.п.)
По сути, можно сказать, что время отклика сервера memcached определяется только сетевыми издержками и практически равно времени передачи пакета от frontend’а до сервера memcached (RTT). Такие характеристики позволяют использовать memcached в высоконагруженных web-проектах для решения различных задач, в том числе и для кэширования данных.
Установка
На нашем сервере установлена ОС Debian 7 x86_64 GNU/Linux
Заходим на сервер из под root пользователя.
Для начала обновим репозитории:
aptget update && aptget upgrade
Теперь установим демон memcached и модуль memcache для PHP:
aptget install memcached php5memcache
Далее, проверяем запустился ли демон:
netstat tap | grep memcached
Получаем:
tcp 0 0 localhost:11211 *:* LISTEN 21488/memcached
По умолчанию memcache слушает порт 11211. Если вам нужен другой порт, отредактируйте конфигурационный файл /etc/memcached.conf. Он идет с довольно подробными комментариями.
Основные из них:
- m 512 ( по умолчанию 64) – параметр указывает сколько памяти выделить для кеширования в мегабайтах;
- p 11211 – порт, который слушает наш демон;
- l 127.0.0.1 – этот параметр отвечает за IP адрес, который слушает демон memcached;
- u nobody от какого пользователя запускать (здесь не рут для безопастности);
- logfile /var/log/memcached.log куда будет складываться лог;
- c 1024 максимальный лимит запросов.
Чтобы изменения вступили в силу, перезагружаем Apache:
/etc/init.d/apache2 restart
Для проверки работоспособности создадим в корне нашего сайта файл: memcachetest.php с содержанием:
<?php
$memcache = new Memcache;
$memcache>connect﴾'localhost', 11211﴿ or die ﴾"Could not connect"﴿;
$version = $memcache>getVersion﴾﴿;
echo "Server's version: ".$version."<br/>\n";
$tmp_object = new stdClass;
$tmp_object>str_attr = 'test';
$tmp_object>int_attr = 123;
$memcache>set﴾'key', $tmp_object, false, 10﴿ or die ﴾"Failed to
save data at the server"﴿;
echo "Store data in the cache ﴾data will expire in 10
seconds﴿<br/>\n";
$get_result = $memcache>get﴾'key'﴿;
echo "Data from the cache:<br/>\n";
var_dump﴾$get_result﴿;
?>
Переходим по адресу ваш_домен\memcachetest.php. Если видим:
Server's version: 1.4.13
Store data in the cache (data will expire in 10 seconds)
Data from the cache:
object(stdClass)#3 (2) { ["str_attr"]=> string(4) "test" ["int_attr"]=> int(123) } В©
то все хорошо. Memcache установлен и работает.
Также для просмотра данных о нашем демоне пригодится файлик info.php с содержанием:
<?php
phpinfo();
?>
Открываем его по адресу ваш_домен\info.php.