Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Недокументированный Memcached-2

У модуля Мемкешед для ПХП удивительно плохо с документацией, я иногда заглядываю в его исходники, с целью почитать. Недавно наткнулся на очередную опцию, описания которой в документации нет (причём в документации аналогичного модуля для Пайтона она есть).

Оказываются UDP не единственный способ ускорить работу с Мемкешед, если вам скорость важнее результата операции. Способ хорош тем, что используется протокол TCP (т. е. с гарантированной доставкой), но мы не ждём — нам главное, что кеш-сервер переданное получил, а получилось ли записать — дело десятое.

Посмотрите на пример и обратите внимание на опцию OPT_NOREPLY.

$m = new Memcached;
$m->addServer(0, 11211);

$val = str_repeat(file_get_contents('/etc/passwd'), 200);

$m->set('key', $val);
$m->setOption(Memcached::OPT_NOREPLY, true);
$m->setOption(Memcached::OPT_COMPRESSION, false);

$time = microtime(true);
$m->append('key', $val);
echo number_format(microtime(true) - $time, 4, ',', ''), "\n";

Кстати, такое большое (как в примере) значение мне потом обратно прочитать не удалось, видимо превысил какие-то лимиты, так что оно здесь просто для иллюстрации и чтобы разница в задержке была очевидней. Без ключа операция append у меня заняла 0,0407 секунд, с ним — 0,0013.

Интересно, что можно делать несколько операций append подряд, очерёдность их сохраняется, корректность прочитанного — тоже. Вот только непонятно не может ли чтение получить данные между двумя append, скорее всего — может, но этот способ как раз для случаев, когда на первом месте скорость записи к кеш.

5 комментариев
cczy (cczy.livejournal.com) 2014

«превысил какие-то лимиты»

А в Сети разве нельзя найти более подробное описание/документацию, если в hard copy инструкции ничего не сказано об ограничениях?

Влад Никольский
Новороссийск

Евгений Степанищев (bolknote.ru) 2014

Комментарий для cczy.livejournal.com:

Сказано, наверное, только мне это не нужно. Запись объёмом в мегабайт хранить в кеше — сомнительная идея, на мой взгляд.

Евгений Степанищев (bolknote.ru) 2014

Комментарий для cczy.livejournal.com:

Под «кешем» я тут Мемкешед имею ввиду.

cczy.livejournal.com/ 2014

Ага, понял. Спасибо за ответ.
Честно говоря, я не особый специалист, а просто интересующийся. Учусь на том, что нахожу в Сети.

Прошу прощенья, получается новый коммент. Не нашёл ссылку как ответить на ваш коммент.

Влад Никольский
Новороссийск

Евгений Степанищев (bolknote.ru) 2014

Комментарий для http://cczy.livejournal.com/:

Это и есть способ ответить на коммент.