Установка memcache и memcached на Убунту
Что такое Memcache?
Memcache – это система, которая позволяет ускорить работу виртуальных частных серверов за счет кэширования информации сервера. Данная программа позволяет выделить определенное количество RAM сервера для кэширования недавно запрошенных данных в течение определенного количества времени. Если данные вновь запрашиваются, Memcache ускоряет процесс извлечения этой информации.
Устанавливаем под root в консоли.
Рекомендуется обновить список пакетов, чтобы убедиться, что все загруженные пакеты находятся в актуальном состоянии.
В новых версиях Убунту sudo прописывать ненужно.
sudo apt-get update
Кроме того, нужно установить на сервер phpХ, где Х версия вашего php
Узнать версию введя php -v
sudo apt-get install php5.6-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.ini
Теперь программа Memcache установлена и готова к работе.
Просмотр статистики
Проверить, установился ли Memcache, можно с помощью функции поиска:
ps aux | grep memcache
Кроме того, можно ознакомиться со статистикой memcache, набрав:
echo "stats settings" | nc localhost 11211
Как работает Memcache?
Memcache работает путем перенаправления кода на извлечение данных из кэша до отправления запросов базе данных сервера. Кэш хранит недавно полученные данные сервера в течение определенного времени. Таким образом, при поступлении последующих запросов серверу не придется выполнять сложный процесс извлечения информации из базы данных, что значительно ускорит работу.
Memcache отображает этот сокращенный код на домашней странице:
function get_foo(foo_id)<br>foo = memcached_get("foo:" . foo_id)<br>return foo if defined foo<br>foo = fetch_foo_from_database(foo_id)<br>memcached_set("foo:" . foo_id, foo)<br>return foo<br>end
Пример использования Memcache
Данный раздел покажет, как создать простой PHP-скрипт для использования Memcache, чтобы извлечь значение, которое первоначально находилось в таблице MySQL.
Следующие комнды создают пользователя MySQL (который может получить доступ к соответствующей базе данных), таблицу для запросов, а также внесут в новую таблицу одно значение, которое понадобится для проведения проверки.
Итак, войдите в mysql (mysql -u root –p) и выполните команды:
use test;<br>grant all on test.* to test@localhost identified by 'testing123';<br>create table example (id int, name varchar(30));<br>insert into example values (1, "new_data");<br>exit;
Выйдите из MySQL и создайте скрипт-файл memcache:
nano memtest.php
Чтобы создать php-скрипт, выполните следующие действия (пример готового скрипта можно найти ниже):
- Для начала создайте новое постоянное соединение с memcache на порту memcache по умолчанию (это порт 11211).
<?php<br>$meminstance = new Memcache();<br>$meminstance->pconnect('localhost', 11211);
- Затем нужно подключиться к новой базе данных mysql через ранее созданного пользователя:
mysql_connect("localhost", "test", "testing123") or die(mysql_error());<br>mysql_select_db("test") or die(mysql_error());
- Теперь создайте запрос, а также укажите ключ для него:
$query = "select id from example where name = 'new_data'";<br>$querykey = "KEY" . md5($query);
Сначала скрипт ищет ответ на запрос в кэше. Если результат не обнаружен, скрипт перенаправляет запрос к исходной базе данных. После того как ответ на запрос был найден в исходной БД, скрипт сохраняет результат в кэше, используя команду set (эта команда сохраняет запрос и позволяет пользователю указать время в секундах, на протяжении которого данные должны оставаться в кэше).
При первом запуске скрипт сообщит, что данные были собраны из базы данных MySQL. Но после этого он, как и положено, сохраняет информацию в кэше, так что во время второго запуска скрипт извлекает запрашиваемые данные уже из кэша. Через 10 минут кэш очистится, потому при следующем запуске скрипт снова будет искать информацию в базе данных.
$result = $meminstance->get($querykey);<br>if (!$result) {<br>$result = mysql_fetch_array(mysql_query("select id from example where name = 'new_data'")) or die('mysql error');<br>$meminstance->set($querykey, $result, 0, 600);<br>print "got result from mysql\n";<br>return 0;<br>}<br>print "got result from memcached\n";<br>return 0;<br>?>
В целом, готовый скрипт имеет следующий вид:
<?php<br>$meminstance = new Memcache();<br>$meminstance->pconnect('localhost', 11211);<br>mysql_connect("localhost", "test", "testing123") or die(mysql_error());<br>mysql_select_db("test") or die(mysql_error());<br>$query = "select id from example where name = 'new_data'";<br>$querykey = "KEY" . md5($query);<br>$result = $meminstance->get($querykey);<br>if (!$result) {<br>$result = mysql_fetch_array(mysql_query("select id from example where name = 'new_data'")) or die('mysql error');<br>$meminstance->set($querykey, $result, 0, 600);<br>print "got result from mysql\n";<br>return 0;<br>}<br>print "got result from memcached\n";<br>return 0;<br>?>
При запуске из командной строки скрипт выведет следующий результат:
# php memtest.php<br>got result from mysql<br># php memtest.php<br>got result from memcached<br># php memtest.php<br>got result from memcached
Итоги
Данное руководство рассказывает, как ускорить извлечение данных из БД при помощи подключения ее к memcache. Но имейте ввиду: кэш – это не склад данных (что и является причиной мощности memcache). Потому, используя memcache, не ожидайте, что это заменит базу данных, поскольку memcache хранит данные только в течение заданного промежутка времени для заданного ключа. То есть, по истечении установленного интервала времени необходимая информация будет удалена из кэша. Потому исходная база данных является обязательным условием надежной работы сервера.
Тем не менее, memcache – очень полезная программа, которая может во многом повысить производительность сервера.