Основы работы с Memcached в php

Опубликовано 2021.08.31

Memcached - это система кэширования на основе ОЗУ, которая позволяет хранить данные и объекты. Он был создан для сайта LiveJournal, но сейчас используется на огромном количестве сайтов. Преимущество: высокая эффективность и масштабируемость, возможность комбинировать серверы memcached, работающие на разных машинах.

Установка

Memcached доступен в репозиториях многих дистрибутивов Linux, и если он отсутствует, компиляция должна быть простой. Поддержка PHP memcached обеспечивается бинарным расширением, доступным на pecl.php.net. Стандартная сборка:

  1. phpize
  2. ./configure
  3. make
  4. make install

Затем в php.ini добавляем:

  1. 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:

  1. $memcache = new Memcache;
  2. $memcache->connect('localhost', 11211) or die ('Ошибка подключения');
  3.  
  4. $version = $memcache->getVersion();
  5. echo '<b>Версия сервера</b>: '.$version;

Данный код выведет версию сервера memcached.

Теперь кое-что более полезное - сохранение и получение объектов из memcached:

  1. $memcache = new Memcache;
  2. $memcache->connect('localhost', 11211) or die ('Ошибка подключения');
  3.  
  4. if ($get_result = $memcache->get('key'))
  5. {
  6. // объекты в кеше
  7. echo "<b>Данные с сервера</b>:<br />";
  8. echo $get_result->str_attr . "<br />";
  9. echo $get_result->int_attr;
  10. }
  11. else
  12. {
  13. // объектов нет в кеше
  14. $tmp_object = new stdClass;
  15. $tmp_object->str_attr = 'test';
  16. $tmp_object->int_attr = time();
  17.  
  18. $memcache->set('key', $tmp_object, false, 10) or die ('Объект не может быть сохранен');
  19. echo "Сохраненные данные будут удалены через 10 секунд<br />";
  20. echo "Обновите страницу, чтобы увидеть данные, хранящиеся в memcached";
  21. }

Посредством метода set мы сохранили на сервере объект. Данный метод принимает три аргумента:

  1. bool Memcache::set ( string ключ, mixed значение [, int flag [, int продолжительность хранения]] )

Где ключ - ключ, под которым будет записано значение(не следует использовать обратный слэш в ключе). flag - указывается Да / Нет, использовать ли сжатие данных, а продолжительность хранения указывает время в секундах, в течение которого элемент хранился на сервере.

Приведенный выше код при первом выполнении отобразит текст, информирующий о том, что данные были сохранены, но обновление страницы с кодом до 10 секунд покажет сохраненные данные. Через 10 секунд элемент будет удален с сервера, и выполнение скрипта сохранит новые данные.