WebWost WebWostbeta

Установка Memcached

Установка, настройка и пример использования Memcached, позволяющего хранить результаты трудоемких расчетов в оперативной памяти.

Al-Sher

Возможно, многие встречались с тем, что некоторые скрипты потребляют очень много ресурсов сервера. Такое часто бывает на крупных и высоконагруженных проектах и именно поэтому, для ресурсоемких скриптов лучше где-нибудь хранить результат выполнения.

Если хранить данные на жестком диске, то мы упремся в возможности HDD/SSD/RAID, то есть в систему хранения данных - это может так же негативно повлиять на скорость обработки данных. Именно по этой причине существует и востребован Memcached, который хранит результаты в оперативной памяти для наибыстрейшего ответа клиенту.

У всего есть свои негативные стороны. У memcached данной стороной является необходимость отключение swap и чуть большего размера оперативной памяти. Если вы берет сервер с запасом, то для вас отдать пару мегабайт для memcached не составит проблем.

Как я уже сказал, для работы memcached необходимо отключать swap. Данное действие связано с тем, что linux может просто "выкинуть" наш кэш в swap и мы, опять же, упремся в возможности системы хранения данных.

Установка Memcached

Для работы Memcached необходимо установить сервер с одноименным названием:

Далее установим php модули:

Настройка memcached

Все настройки memcached хранятся в файле /etc/memcached.conf. Давайте посмотрим те настройки, которые наиболее важны:

После настройки memcached сервера его необходимо перезагрузить:

service memcached restart

Кстати, после установки модуля для php, php желательно так же перезагрузить:

service php-fpm restart

Проверим работу memcached-сервера:

netstat -tap | grep memcached

Пример работы

Давайте создадим скрипт, сохраняющий в кэш текущее время:

<?php 
$memcached = new Memcache;
$memcached->connect('127.0.0.1',11211) or die("Error connect");
$time = @$memcached->get("time");
if(isset($time)) {
    echo $time;
} else {
    $memcached->set("time",time(),false,10);
    echo $memcached->get("time");
}
$memcached->close();
?>

Теперь комментарии: для начала мы определяем класс memcached, благодаря которому и работает вся наша кэширующая система. Далее мы устанавливаем соединение с нашим сервером, указывая в функции connect ip адрес сервера и порт, по которому можно достучаться до memcached. После подключения к кэшируемому серверу нам необходимо проверить, а не записывали ли мы уже необходимую переменную. Данные переменной, находящейся в кэше, можно получить, обратившись к функции get класса memcached, передавая название переменной. Если переменная существует - выводим её из кэша. Если она отсутствует, то добавляем в кэш необходимую информацию, используя функцию set с параметрами(название переменной, содержимое, необходимость сжатия и время хранения(в секундах)) и выводим её. В конце работы с memcached нам необходимо закрыть соединение, путем вызова функции close. Данный пример будет выводить unix-метку времени с точностью до 10 секунд(время хранения кэша).

Дополнительные возможности

В Memcached предусмотрено сжатие данных, но оно будет замедлять процесс работы скриптов. Если для Вас скорость работы намного важнее, чем занимаемое место кэшем, то отключайте его. Так же memcached может работать с пулом серверов, что позволяет распределить нагрузку. Для добавления нового сервера используется функция addServer. Данная функция так же требует ip и порт memcached-сервера. Возможно, во время работы с данными, вам необходимо заменить или удалить содержимое переменной, находящейся в кэше. Не вижу смысла заново прописывать set, ведь для этого существуют функции replace и delete. Для функции delete достаточно будет ввести переменную, а вот replace принимает всё те же параметры, что и set.

Заключение

На этом я хочу закончить данную статью, если у Вас возникли вопросы, то задавайте их в комментариях и я постараюсь Вам помочь :)

0 комментариев

Новый комментарий