Site icon 8HOST.COM

Установка и использование Memcache на Ubuntu 12.04

Что такое Memcache?

Memcache – это система, которая позволяет ускорить работу виртуальных частных серверов за счет кэширования информации сервера. Данная программа позволяет выделить определенное количество RAM сервера для кэширования недавно запрошенных данных в течение определенного количества времени. Если данные вновь запрашиваются, Memcache ускоряет процесс извлечения этой информации.

Требования

Для выполнения данного руководства нужно иметь привилегии root (инструкции можно найти в руководстве «Добавление и удаление пользователей на Ubuntu 12.04 и CentOS 6»). Также рекомендуется обновить список пакетов, чтобы убедиться, что все загруженные пакеты находятся в актуальном состоянии.

sudo apt-get update

Кроме того, нужно установить на сервер MySQL и PHP.

sudo apt-get install mysql-server php5-mysql php5 php5-memcache

Установка memcache

Установка memcache выполняется в несколько действий.

Для начала используйте apt-get, чтобы установить memcached.

sudo apt-get install memcached

Затем нужно установить php-pear – репозиторий, в котором хранится memcache.

sudo apt-get install php-pear

Если на вашем сервере нет компилятора, скачайте инструменты build-essential:

sudo apt-get install build-essential

В завершение используйте PECL (PHP Extension Community Library) для установки memcache:

sudo pecl install memcache

На вопрос «Enable memcache session handler support?» нужно ответить yes, нажав enter во время установки.

Завершив установку, внесите memcached в memcache.ini:

echo "extension=memcache.so" | sudo tee /etc/php5/conf.d/memcache.ini

Теперь программа Memcache установлена и готова к работе.

Просмотр статистики

Проверить, установился ли Memcache, можно с помощью функции поиска:

ps aux | grep memcache

Кроме того, можно ознакомиться со статистикой memcache, набрав:

echo "stats settings" | nc localhost 11211

Как работает Memcache?

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

Memcache отображает этот сокращенный код на домашней странице:

function get_foo(foo_id)
foo = memcached_get("foo:" . foo_id)
return foo if defined foo
foo = fetch_foo_from_database(foo_id)
memcached_set("foo:" . foo_id, foo)
return foo
end

Пример использования Memcache

Данный раздел покажет, как создать простой PHP-скрипт для использования Memcache, чтобы извлечь значение, которое первоначально находилось в таблице MySQL.

Следующие комнды создают пользователя MySQL (который может получить доступ к соответствующей базе данных), таблицу для запросов, а также внесут в новую таблицу одно значение, которое понадобится для проведения проверки.

Итак, войдите в mysql (mysql -u root –p) и выполните команды:

use test;
grant all on test.* to test@localhost identified by 'testing123';
create table example (id int, name varchar(30));
insert into example values (1, "new_data");
exit;

Выйдите из MySQL и создайте скрипт-файл memcache:

nano memtest.php

Чтобы создать php-скрипт, выполните следующие действия (пример готового скрипта можно найти ниже):

  1. Для начала создайте новое постоянное соединение с memcache на порту memcache по умолчанию (это порт 11211).

<?php
$meminstance = new Memcache();
$meminstance->pconnect('localhost', 11211);

  1. Затем нужно подключиться к новой базе данных mysql через ранее созданного пользователя:

mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());

  1. Теперь создайте запрос, а также укажите ключ для него:

$query = "select id from example where name = 'new_data'";
$querykey = "KEY" . md5($query);

Сначала скрипт ищет ответ на запрос в кэше . Если результат не обнаружен, скрипт перенаправляет запрос к исходной базе данных. После того как ответ на запрос был найден в исходной БД, скрипт сохраняет результат в кэше, используя команду set (эта команда сохраняет запрос и позволяет пользователю указать время в секундах, на протяжении которого данные должны оставаться в кэше).

При первом запуске скрипт сообщит, что данные были собраны из базы данных MySQL. Но после этого он, как и положено, сохраняет информацию в кэше, так что во время второго запуска скрипт извлекает запрашиваемые данные уже из кэша. Через 10 минут кэш очистится, потому при следующем запуске скрипт снова будет искать информацию в базе данных.

$result = $meminstance->get($querykey);
if (!$result) {
$result = mysql_fetch_array(mysql_query("select id from example where name = 'new_data'")) or die('mysql error');
$meminstance->set($querykey, $result, 0, 600);
print "got result from mysql\n";
return 0;
}
print "got result from memcached\n";
return 0;
?>

В целом, готовый скрипт имеет следующий вид:

<?php
$meminstance = new Memcache();
$meminstance->pconnect('localhost', 11211);
mysql_connect("localhost", "test", "testing123") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
$query = "select id from example where name = 'new_data'";
$querykey = "KEY" . md5($query);
$result = $meminstance->get($querykey);
if (!$result) {
$result = mysql_fetch_array(mysql_query("select id from example where name = 'new_data'")) or die('mysql error');
$meminstance->set($querykey, $result, 0, 600);
print "got result from mysql\n";
return 0;
}
print "got result from memcached\n";
return 0;
?>

При запуске из командной строки скрипт выведет следующий результат:

# php memtest.php
got result from mysql
# php memtest.php
got result from memcached
# php memtest.php
got result from memcached

Итоги

Данное руководство рассказывает, как ускорить извлечение данных из БД при помощи подключения ее к memcache. Но имейте ввиду: кэш – это не склад данных (что и является причиной мощности memcache). Потому, используя memcache, не ожидайте, что это заменит базу данных, поскольку memcache хранит данные только  в течение заданного промежутка времени для заданного ключа. То есть, по истечении установленного интервала времени необходимая информация будет удалена из кэша. Потому исходная база данных является обязательным условием надежной работы сервера.

Тем не менее, memcache – очень полезная программа, которая может во многом повысить производительность сервера.