Memcached в PHP

В этом уроки мы поговорим о весьма полезном компоненте для кэширования. Обычно используется для кэширования данных из базы данных, тем самым снижает время получения данных практически до нуля. Все данные хранятся в памяти и при перезагрузки apache все данные автоматически удалятся. Внимание! Для использования memcached вам нужно установить его на сервер.

Как установить?

Для установки вам потребуется подключиться через SSH и там выполнить команды: (debian)

apt-get install memcached
apt-get install php5-memcached
/etc/init.d/apache2 restart

После выполнения всех команд вы сможете использовать Memcached.

 

Как использовать?

Для начала нам нужно подключиться. Для этого нужно выполнить следующий код:

$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");

Memcached предоставляет 5 функций:

get() – получает закэшированные данные
set() – кэширует данные
add() – добавляет кэш, если его не существует
replace() – заменяет существующий кэш на новый
flush() – удаляет все закэшированные данные

Memcached хранит все значения по уникальному ключу. Можно использовать md5 для генерации этого ключа. Приведу пример кода, который позволяет получить данные, а если их нет, то получить из базы данных и закэшировать:

$query = "SELECT * FROM `test` WHERE username = 'DeOne'";
$key = md5($query);
$result = $memcache->get($key);
if ($result) {
echo 'Имя пользователя: '.$result['name'];
echo 'Ник пользователя: '.$result['username'];
echo 'Информация получена из Memcached';
} else {
$mysqli = new mysqli('localhost', 'user', 'password', 'db');
if ($mysqli->connect_error) die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
$row = $mysqli->query($query);
$row = $row->fetch_array();
$memcache->set($key, $row, true, 20);
echo "Информация получена из базы данных";
}

Теперь разберем код. Пишем SQL запрос и заносим его в отдельную переменную, затем ниже генерируем уникальный ключ с этим запросом. Далее проверяем есть ли такие данные в кэше, если их нет, то получаем из базы данных и кэшируем. $key — ключ, $row — объект, true — использовать ли MEMCACHE_COMPRESSED (сжатие), 20 — на какое время кэшировать в секундах.

Вот и все. Ничего сложного в этом нет. Это лишь самый просто пример использования этого замечательного компонента. Если у вас есть вопросы, то пишите в комментарии, помогу.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *