Техническая поддержка

Использование memcache

Memcached - высокопроизводительная система кэширования объектов в оперативной памяти. Memcache доступен на тарифных планах линейки "Зенон": "Зенон-420", "Зенон-630" и "Зенон-840", а так же на тарифе "Bitrix".

Подключение memcache

Подключить услугу Memcache возможно подключить в Панели управления услугами. Для этого необходимо выбрать сайт для которого нужен Memcache и в блоке "Дополнительные услуги" перейти по ссылке [добавить].

В открывшемся окне нужно выбрать "Memcache" и нажать кнопку "Добавить".

После включения услуги Вы сможете подключаться к персональной копии memcached через unix socket по адресу путь_к_домашней_директории/memcached.sock.

Принцип работы memcache

Общая схема работы memcached проста:

  • memcached работает в виде демона и умеет хранить в выделенном для него объеме оперативной памяти некий массив данных в виде набора пар "ключ - объект";
  • клиентская часть, например, скрипт на веб-сервере обращается за данными к memcached и при их наличии начинает с ними работать, не выполняя более ресурсоемких запросов (например, к базе данных);
  • при отсутствии данных в кэше, делается основной запрос, например, к базе;
  • полученные данные обрабатываются клиентской частью и заносятся в кэш memcached для последующей работы с ними.

Описанная схема, конечно же, примитивна. Любой разработчик может использовать memcached для своих задач по собственному усмотрению.

memcached использует четыре метода для работы с данными: один - get - для получения объекта из кэша, и три для записи данных:

  • set - безусловная запись значения по ключу в кэш;
  • add - запись данных в кэш только в том случае, если в нем еще нет такого ключа;
  • replace - запись данных в кэш только в том случае, если ключ уже есть.

Работа с memcache в PHP, пример кода

В PHP для работы с memcached используется PECL расширение Memcache.

Для работы Memcache на хостинге нужно подключить собственный конфигурационный файл php.ini, прописать в нем строки:

extension_dir = "/usr/local/php5/lib/php/libexec" 
extension="memcache-php5.so"

Можно указать и любой другой локальный путь внутри собственной домашней директории в качестве extension_dir - это может быть полезно в том случае, если Вы еще используете какие-либо свои модули PHP. При указании локальной директории необходимо скопировать в нее файл /usr/local/php5/lib/php/libexec/memcache-php5.so.

После внесения всех необходимых изменений и рестарта веб-сервера Apache Вам будут доступны функции PHP для работы с memcache.

В указанном ниже примере мы подключаемся к memcached, выводим версию сервера, создаем новый объект, записываем данные в кэш сроком на 10 секунд, читаем эти же данные и выводим их на экран.

<?php
$memcache = new Memcache;
$memcache->connect('unix:///путь/memcached.sock',0)
or die ("Could not connect");

$version = $memcache->getVersion();
echo "Server's version: ".$version."<br/>\n";
$tmp_object = new stdClass;
$tmp_object->str_attr = 'test';
$tmp_object->int_attr = 123;

$memcache->set('key', $tmp_object, false, 10)
or die ("Failed to save data at the server");
echo "Store data in the cache (data will expire in 10 seconds)<br/>\n";
$get_result = $memcache->get('key');
echo "Data from the cache:<br/>\n";
var_dump($get_result);
?>

Работа с memcache в Perl, пример кода

В Perl для работы с memcached можно использовать, например, библиотеки Cache::Memcached, Cache::Memcached::libmemcached.

В указанном ниже примере мы подключаемся к memcached, записываем в кэш строковую переменную и смешанный объект, читаем из кэша эти же данные и выводим на экран один из элементов массива.

#!/usr/local/bin/perl
use Cache::Memcached;
$memcached = new Cache::Memcached {
'servers' => [ "/путь/memcached.sock" ],
'debug' => 0,
 };
$memcached->set("my_key", "Some value");
$memcached->set("object_key", { 'complex' => [ "object", 2, 4 ]});

$val = $memcached->get("my_key");
$val = $memcached->get("object_key");
if ($val) { print $val->{'complex'}->[2]; }

Полезные ссылки по memcache