Установка Memcache на Ubuntu 14.04

Автор: | 20.05.2016

Описание

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

Memcache это программа, которая позволяет временно хранить (кэшировать) данные в оперативной памяти на основе хеш-таблиц. При поступлении запроса, memcache проверит наличие данных в оперативной памяти, если данных в кэше нет, будет произведен запрос к базе данных. При последующем запросе тех же данных ответ будет выдан из оперативной памяти Memcache. Это позволит нам значительно ускорить работу сервера, т.к. данные будут отдаваться из оперативной памяти, а из базы данных.

Установка Memcache и компонентов

Все компоненты доступны в репозиториях Ubuntu

Нам потребуется установить  Memcache, сервер баз данных MySQL и PHP с компонентами для взаимодействия.

Установка Memcache

sudo apt-get install memcahed

Memcached установлен

По дефолту Memcached прослушивает порт — 11211, на localhost(127.0.0.1). Файл настроек Memcached расположен /etc/memcached.conf

logfile /var/log/memcached.log задается расположение лог файла

-m задает размер памяти под кеш (в мегабайтах)

-p задается порт, который слушает Memcached

-l задается IP адрес, который слушает Memcached

Установка компонентов

sudo apt-get update

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

Стоит обратить внимание. Есть два компонента для PHP Memcache, один php-memcache, а другой php-memcached. Мы будем использовать php-memcacheD, т.к. он более стабилен и реализует больше возможностей.

Вводим и подтверждаем пароль для администратора(Root) MySQL сервера

MySQL-password

Теперь давайте проверим, как это работает

Сделаем запрос к PHP, что он знает о Memcached и включен ли он.

Создаем файл info.php в корневом разделе по умолчанию. /var/www/html/

sudo nano /var/www/html/info.php

Напишем PHP запрос для вывода информации о состоянии web-сервере и его компонентах.

<?php
phpinfo();
?>

Теперь посмотрим информацию в браузере. http://server_ip/info.php

memcache

Memcached включен и найден на веб-сервере.

Так же можно проверить, запущена ли служба Memcached

ps aux | grep memcached

ps_aux

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

sudo service memcached restart

Проверим, может ли Memcached кэшировать данные

Служба Memcached запущена. Напишем скрип, чтобы убедиться в работоспособности Memcached.

Создадим файл test.php

sudo nano /var/www/html/test.php

Со следующим содержанием.

<?php
$mem = new Memcached();
$mem->addServer(«127.0.0.1», 11211);$result = $mem->get(«blah»);if ($result) {
echo $result;
} else {
echo «No matching key found. I’ll add that now!»;
$mem->set(«blah», «I am data! I am held in memcached!») or die(«Couldn’t save anything to memcached…»);
}
?>

Для проверки в браузере запустим такую ссылку:

http://ip-server/test.php

Обновим страницу в браузере

Как видно, сервис Memcached может кэшировать данные, заданные в нашем скрипте.

Скрипт PHP для тестирования кэширования данных MySQL

Будем искать данные в Memcached и если они найдены, выведем. Если данные не обнаружены в Memcached, будет произведен запрос в базу данных, а затем результат выведен и сохранен в Memcached для последующих запросов, время кэширования данных зададим 10 секунд.

Создаем базу данных MySQL

mysql -u root -p

Вводим пароль Администратора(root) MySQL

mysql>CREATE DATABASE mem_test; USE mem_test;

Создаем пользователя test с паролем testing123, у которого будет доступ к базе, которую мы создали.

GRANT ALL ON mem_test.* TO test@localhost IDENTIFIED BY ‘testing123’;

Создаем таблицу sample_data и добавляем в нее запись some_data.

CREATE TABLE sample_data (id int, name varchar(30)); INSERT INTO sample_data VALUES (1, «some_data»);

Выходим из MySQL

exit

Создаем файл.

sudo nano /var/www/html/database_test.php

Со следующим содержание:

<?php
$mem = new Memcached();
$mem->addServer(«127.0.0.1», 11211);mysql_connect(«localhost», «test», «testing123») or die(mysql_error());
mysql_select_db(«mem_test») or die(mysql_error());$query = «SELECT name FROM sample_data WHERE id = 1»;
$querykey = «KEY» . md5($query);$result = $mem->get($querykey);if ($result) {
print «<p>Data was: » . $result[0] . «</p>»;
print «<p>Caching success!</p><p>Retrieved data from memcached!</p>»;
} else {
$result = mysql_fetch_array(mysql_query($query)) or die(mysql_error());
$mem->set($querykey, $result, 10);
print «<p>Data was: » . $result[0] . «</p>»;
print «<p>Data not found in memcached.</p><p>Data retrieved from MySQL and stored in memcached for next time.</p>»;
}
?>

Тест

В браузере открываем http://server_ip/database_test.php

Обновляем страничку в браузере

Если подождать 10 секунд, то снова получим данные с базы а не с Memcached

Memcached может сильно помочь в работе вашего сервера и повысить его производительность