Memcache — это программа, которая позволяет временно хранить (кэшировать) данные в оперативной памяти на основе хеш-таблиц. При поступлении запроса, memcache проверит наличие данных в оперативной памяти, если данных в кэше нет, будет произведен запрос к базе данных. При последующем запросе тех же данных ответ будет выдан из оперативной памяти Memcache. Это позволит нам значительно ускорить работу сервера, т.к. данные будут отдаваться из оперативной памяти, а не из базы данных.
Установка Memcached и компонентов
Все компоненты доступны в официальном репозитории Ubuntu
Нам потребуется установить Memcached и необходимые зависимости, сервер баз данных MySQL и PHP с компонентами для взаимодействия.
Установка Memcached
sudo apt install memcached libmemcached-dev
По дефолту Memcached прослушивает порт — 11211, на localhost(127.0.0.1). Файл настроек Memcached расположен /etc/memcached.conf
- logfile /var/log/memcached.log — задается расположение лог файла
- -m — задает размер памяти под кеш (в мегабайтах)
- -p — задается порт, который слушает Memcached
- -l — задается IP адрес, который слушает Memcached
Установка необходимых компонентов
sudo apt update && sudo apt install mysql-server mysql-client php-mysql php php-memcached
Стоит обратить внимание. Есть два компонента для PHP Memcache, один php-memcache, а другой php-memcached. Мы будем использовать php-memcached, т.к. он более стабилен и реализует больше возможностей.
Теперь давайте проверим, как это работает
Сделаем запрос к PHP, что он знает о Memcached и включен ли он.
Создаем файл info.php в корневом разделе по умолчанию. /var/www/html/
sudo nano /var/www/html/info.php
С содержимым:
<?php
phpinfo();
?>
Сохраняем файл ctrl+o и выходим ctrl+x
Теперь посмотрим информацию в браузере. Для этого переходим по адресу:
http://IP_сервера/info.php
должны получить вот такое:
Memcached включен и найден на сервере.
Так же можно проверить, запущена ли служба Memcached
sudo netstat -tap | grep memcached
Вывод должен быть следующий:
tcp 0 0 localhost.localdo:11211 0.0.0.0:* LISTEN 5971/memcached
Как проверить работу Memcached
Создадим в корне сайта файл test.php и запишем туда следующий код:
<?php
Создаем объект для работы с Memcached
$memcached = new Memcached ();
#Подключаемся к нашему серверу, можно добавить несколько серверов. В нашем примере добавляем один и работать будем с одним
$memcached->addServer("localhost", 11211);
# Для добавления записи используется 3 процедуры add() set() и replace() # add() - добавлет новую запись, в случае если запись с таким ключом существует - вернет false
# set() - устанавливает значение записи по ключу, на ее работу не влияет существует запись или нет
# replace() - заменят значение существующие записи, если запись не существует - вернет false
# Ниже примеры для добавления числа, строки, массива и объекта. Метод getResultMessage() возвращает сообщение с результатом выполнения
echo ($memcached->add("its_integer", rand(0, 100))) ? "Добавили число" : "Ошибка добавления числа ".$memcached->getResultMessage() ;
echo '</br>';
echo ($memcached->add("its_string", rand(100, 200))) ? "Добавили строку" : "Ошибка добавления строки ".$memcached->getResultMessage() ; echo '</br>';
echo ($memcached->set("its_array", array("v1"=> rand(200, 1000), "v2"=> rand (1000, 1200)))) ? "Добавили массив" : "Ошибка добаления массива ".$memcached->getResultMessage();
echo '</br>';
echo "Данные, записанные в Memcached:\n"; var_dump($memcached->get("its_integer" ));
echo '<br>';
var_dump($memcached->get("its_string" ));
echo '<br>';
var_dump($memcached->get("its_array"));
echo '<br>';
$tmp_object->ноль = 0;
$tmp_object->число = 123;
$memcached->set("key", array($tmp_object, rand(0, 55)));
echo "Записываем данные в кеш Memcached\n";
$get_result = $memcached->get('key');
echo "Данные, записанные в Memcached:\n";
var_dump($get_result);
#Если раскоментировать строчку, то данные обновятся
//$memcached->flush ();
$memcached->quit (); ?>
Теперь осталось проверить результаты: http://IP-servera/test.php
[endtxt]