Memcached - это система кэширования на основе ОЗУ, которая позволяет хранить данные и объекты. Он был создан для сайта LiveJournal, но сейчас используется на огромном количестве сайтов. Преимущество: высокая эффективность и масштабируемость, возможность комбинировать серверы memcached, работающие на разных машинах.
Установка
Memcached доступен в репозиториях многих дистрибутивов Linux, и если он отсутствует, компиляция должна быть простой. Поддержка PHP memcached обеспечивается бинарным расширением, доступным на pecl.php.net. Стандартная сборка:
phpize ./configure make make install
Затем в php.ini добавляем:
extension = memcached.so
Memcached в PHP
Вот краткий обзор API методов для ручной работы:
- Memcache :: add - Добавляет элемент на сервер
- Memcache :: addServer - Добавляет сервер memcached в список используемых серверов
- Memcache :: close - Закрывает соединение
- Memcache :: decrement - Уменьшает значение объекта
- Memcache :: delete - Удаляет объект с сервера
- Memcache :: flush - Удаляет все объекты с сервера
- Memcache :: get - Возвращает объект с сервера
- Memcache :: getExtendedStats - Статистика по всем серверам memcached
- Memcache :: getServerStatus - Вернёт статус по всем серверам memcached
- Memcache :: getStats - Статистика сервера
- Memcache :: getVersion - Вернёт версию сервера memcached
- Memcache :: increment - Увеличивает значение объекта
- Memcache :: pconnect - Открывает постоянное соединение
- Memcache :: replace - Изменяет значение указанного объекта
- Memcache :: set - Сохраняет данные на сервере
- Memcache :: setCompressThreshold - Включает автоматическое сжатие больших значений
- Memcache :: setServerParams - Изменит параметры и состояние сервера
Чтобы использовать memcached, нам нужно запустить сервер memcaced локально. Самое простое решение - выполнить команду memcached в консоли непривилегированным пользователем (без полномочий root). Memcached загрузится с настройками по умолчанию и будет прослушивать порт 11211.
Использование
Вот простой пример использования memcached API:
$memcache = new Memcache; $version = $memcache->getVersion(); echo '<b>Версия сервера</b>: '.$version;
Данный код выведет версию сервера memcached.
Теперь кое-что более полезное - сохранение и получение объектов из memcached:
$memcache = new Memcache; if ($get_result = $memcache->get('key')) { // объекты в кеше echo "<b>Данные с сервера</b>:<br />"; echo $get_result->str_attr . "<br />"; echo $get_result->int_attr; } else { // объектов нет в кеше $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; echo "Сохраненные данные будут удалены через 10 секунд<br />"; echo "Обновите страницу, чтобы увидеть данные, хранящиеся в memcached"; }
Посредством метода set мы сохранили на сервере объект. Данный метод принимает три аргумента:
bool Memcache::set ( string ключ, mixed значение [, int flag [, int продолжительность хранения]] )
Где ключ - ключ, под которым будет записано значение(не следует использовать обратный слэш в ключе). flag - указывается Да / Нет, использовать ли сжатие данных, а продолжительность хранения указывает время в секундах, в течение которого элемент хранился на сервере.
Приведенный выше код при первом выполнении отобразит текст, информирующий о том, что данные были сохранены, но обновление страницы с кодом до 10 секунд покажет сохраненные данные. Через 10 секунд элемент будет удален с сервера, и выполнение скрипта сохранит новые данные.