В этом уроки мы поговорим о весьма полезном компоненте для кэширования. Обычно используется для кэширования данных из базы данных, тем самым снижает время получения данных практически до нуля. Все данные хранятся в памяти и при перезагрузки 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 — на какое время кэшировать в секундах.
Вот и все. Ничего сложного в этом нет. Это лишь самый просто пример использования этого замечательного компонента. Если у вас есть вопросы, то пишите в комментарии, помогу.