Описание
Постепенно увеличивается нагрузка на ваш сайт. Растет нагрузка на сервер баз данных. Для увеличения производительности сайта можно и нужно использовать кэширование.
Установка 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 сервера
Теперь давайте проверим, как это работает
Сделаем запрос к PHP, что он знает о Memcached и включен ли он.
Создаем файл info.php в корневом разделе по умолчанию. /var/www/html/
sudo nano /var/www/html/info.php |
Напишем PHP запрос для вывода информации о состоянии web-сервере и его компонентах.
<?php phpinfo(); ?> |
Теперь посмотрим информацию в браузере. http://server_ip/info.php
Memcached включен и найден на веб-сервере.
Так же можно проверить, запущена ли служба Memcached
ps aux | grep memcached |
Для перезапуска службы 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 может сильно помочь в работе вашего сервера и повысить его производительность
Views: 0