Использование 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]; }