Мемкеш, Php, Кетама. Если Нет, То Я Очень Хочу.

Я хочу.

Кетам в PHP, да еще так, чтобы был доступ хоть откуда-то.

Я не говорю о PHP. Я имею в виду доступ.

Ну и из PHP тоже.

Хорошо, давайте начнем.

Что мы имеем.

Интернет, Гугл.

… Все :( Аааа, чуть не забыл.

Самое важное.

Потолок, чтобы было куда тупо смотреть.

Итак, давайте Google. В PHP нет кетама.

Где это? Ого, на Last.fm. www.lastfm.ru/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients Но после 10 апреля 2007 года версию 0.1.1 никто не обновлял, да и набор функционала несколько скудный.

На Данге.

com уже завален всякой ерундой.

Возможно, это возможно, но разобраться в этом немного хлопотно.

Давайте погуглим дальше.

tangent.org Что мы имеем.

Функции Memcached для MySQL libmemcached 0.23 УХ ТЫ!!!! Клиенты, использующие библиотеку: Рубин: github.com/fauna/memcached/tree/master Перл: code.google.com/p/perl-libmemcached Питон: code.google.com/p/python-libmemcached PHP: (на японском языке) labs.gree.jp/Top/OpenSource/libmemcached.html Давайте отправимся туда, где есть PHP. СТОРОЖИТЬ!!! Шалашики.

Блин и версия 0.1.0. Но она свежая, от 18 сентября 2008 года.

Короче говоря, глюки в ней до сих пор не исправлены, потому что ни у кого не было времени их искать.

… Все.

Больше ничего нет. Ну давай попробуем.

Наверное, лучше не начинать с хижин.

Хотя весь мой буржуазный словарь такой: привет, да, нет, проблема, спасибо и все.

.

ну не всё конечно, там тоже херня, но мне это не поможет. В японском оно короче.

Я устанавливаю libmemcached и функции Memcached для MySQL на сервер базы данных.

На веб-сервер libmemcached. Воспитание четырех демонов memcached. Один на веб-сервере, три на сервере базы данных.

Почему? И кто знает, случилось ли это именно так.

Я устанавливаю функции.

Хм, список впечатляет memc_add memc_add_by_key memc_servers_set memc_server_count memc_set memc_set_by_key memc_cas memc_cas_by_key memc_get memc_get_by_key memc_delete memc_delete_by_key memc_append memc_append_by_key memc_prepend memc_prepend_by_key memc_increment memc_decrement memc_replace memc_replace_by_key memc_servers_behavior_set memc_udf_version memc_list_behaviors memc_stats memc_stat_get_keys memc_stat_get_value Не понял.

Если есть Кас? Откуда оно берется? Почему я сдала Кас без гетов!!! Хорошо, мы напомним им об этом.

Может быть.

Определение серверов

SELECT memc_servers_set(‘192.168.0.10:11211, 192.168.0.11:11211, 192.168.0.11:11212, 192.168.0.11:11213);

Засовываем десять ключей в тайник

SELECT memc_set(‘key1’, ‘val1’); … SELECT memc_set(‘key10’, ‘val10’);

Берем их из тайника

SELECT memc_get(‘key1’); … SELECT memc_get(‘key10’);

Вроде нормально, возвращает то, что вложил.

Теперь валим одного демона memcached. Как и следовало ожидать, были прикрыты две клавиши.

Мы снова кэшируем 10 одинаковых ключей.

Черт возьми.

Те же самые два пропавших без вести человека так и не появились.

Кетамой даже не пахнет. Ну да ладно, я не против прочитать ридми.

Я не нашел ничего умного в функциях Memcached для MySQL. Пойдем tangent.org .

Блин, как все запутано.

Да, это то, на что это похоже docs.tangent.org/libmemcached/memcached_behavior.html По мнению переводчика, поведение такое.

По умолчанию MEMCACHED_BEHAVIOR_DISTRIBUTION — это MEMCACHED_DISTRIBUTION_MODULA, но нам нужны MEMCACHED_DISTRIBUTION_CONSISTENT и MEMCACHED_BEHAVIOR_HASH, чтобы был MEMCACHED_HASH_KETAMA. И memcached_behavior_set() делает это.

В MySQL для этого параметра должно быть установлено значение memc_servers_behavior_set. Брр, стоп.

Что это такое в документе memcached_behavior.pod? = элемент MEMCACHED_BEHAVIOR_DISTRIBUTION Используя это, вы можете включить различные способы распространения значений на серверы.

Метод по умолчанию — MEMCACHED_DISTRIBUTION_MODULA. Вы можете включить согласованное хеширование, установив MEMCACHED_DISTRIBUTION_CONSISTENT. Последовательное хеширование обеспечивает лучшее распределение и позволяет серверам добавлен в кластер с минимальными потерями кэша.

В настоящее время MEMCACHED_DISTRIBUTION_CONSISTENT — это псевдоним значения.

MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA. = элемент MEMCACHED_BEHAVIOR_KETAMA Устанавливает дистрибутив по умолчанию MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA. и хэш MEMCACHED_HASH_MD5. Что-то в моей голове начинает идти не так.

Да, я наверное понял, нужно сделать MEMCACHED_BEHAVIOR_KETAMA. Так? Продолжим чтение.

Кажется глупым нуждаться во всем.

Лучше было бы понять это по-буржуазному.

Похоже, это оно Для простых опций включения или выключения вам просто нужно передать значение 1. Итак, вам нужен набор MEMCACHED_BEHAVIOR_KETAMA 1. Ну давай попробуем.



SELECT memc_servers_behavior_set (‘MEMCACHED_BEHAVIOR_KETAMA’, 1);

Хм.

Кирдык полон.



mysql>SELECT memc_servers_behavior_set('MEMCACHED_BEHAVIOR_KETAMA', 1); ERROR 2013 (HY000): Lost connection to MySQL server during query mysql>

Единственное лекарство - перезапустить сервер MySQL. ХОРОШО.

Напишем разработчикам forums.mysql.com/read.php?150 ,231325,231325#msg-231325 Быстро.

отписался forums.mysql.com/read.php?150 ,231325,231359#msg-231359 И если так forums.mysql.com/read.php?150 ,231325,231442#msg-231442 То же самое.

Кажется, это долго.

Вам придется тупо смотреть в потолок.

Может быть, там что-то есть? Точно.

Есть.

Только некоторые мысли не умные, а грязные.

Если то, что мне нужно, приходит откуда-то, это не то, что мне нужно.

Значит, они положили его куда-то.

Мне просто нужно найти его где-нибудь и положить туда то, что мне нужно.

Вот черт. Зайдите в источники.

И они здесь.

И я знаю только название C. Я имею в виду, что именно так называется язык.

В любом случае.

Делать нечего, будем искать знакомые слова.

Библиотека MySQL, наверное, не стоит, это просто блокнот. Давайте перейдем к самой libmemcached. Да, вот оно.

В memcached.c. строка 29 ptr-> распределение= MEMCACHED_DISTRIBUTION_MODULA; целых два знакомых слова.

Да и название конструкции многообещающее: memcached_st *memcached_create(memcached_st *ptr).

Теперь попробуем понять, кто такой memcached_st. Наверное, понятно.

По словам libmemcached.pod, если на Translate.ru мне все правильно объяснили, то это то самое место, где находится не то.

Давайте снова tangent.org .

Конференции там нет, но есть почтовый червь lists.tangent.org/mailman/listinfo/libmemcached .

Там не так уж и много.

Давайте найдём знакомые слова.

Есть что-то.

lists.tangent.org/pipermail/libmemcached/2008-September/000434.html Если я правильно понимаю, вам нужно в какой-то степени установить MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT. Говорят 10, попробую 3. lists.tangent.org/pipermail/libmemcached/2008-August/000429.html Что ж, мы сделаем то же самое.

Так.

Попробуем поправить источники.

В смысле поставить то, что нужно.

Вместо ptr-> distribution= MEMCACHED_DISTRIBUTION_MODULA; Напишем ptr-> distribution= MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA; Ух ты.

Мои первые 0,5 строчки на C в жизни.

Вместо ptr-> retry_timeout= 0; Напишем ptr-> retry_timeout= 60; Ураааа.

Зачем вместо этого писать о MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT? Мы снова тупо смотрим в потолок.

Зачем это смотреть? Найдите SERVER_FAILURE_LIMIT в источниках.

Есть.

В memcached_behavior.c. Страница 166, называется ptr-> server_failure_limit. Добавим по аналогии с остальными ptr-> server_failure_limit= 3; Возможно, придется прокатиться.

По сути, если что-нибудь случится, сервер умрет. Поэтому мы поставим его таким же образом.

Это то, что произошло

memcached_st *memcached_create(memcached_st *ptr) { memcached_result_st *result_ptr; if (ptr == NULL) { ptr= (memcached_st *)malloc(sizeof(memcached_st)); if (!ptr) return NULL; /* MEMCACHED_MEMORY_ALLOCATION_FAILURE */ memset(ptr, 0, sizeof(memcached_st)); ptr->is_allocated= MEMCACHED_ALLOCATED; } else { memset(ptr, 0, sizeof(memcached_st)); } result_ptr= memcached_result_create(ptr, &ptr->result); WATCHPOINT_ASSERT(result_ptr); ptr->poll_timeout= MEMCACHED_DEFAULT_TIMEOUT; ptr->connect_timeout= MEMCACHED_DEFAULT_TIMEOUT; ptr->retry_timeout= 60; ptr->distribution= MEMCACHED_DISTRIBUTION_CONSISTENT_KETAMA; ptr->server_failure_limit= 3; return ptr; }

Все.

Давайте перекомпилируем библиотеку и двинемся дальше.

Перейдем к онани.

ну, вы поняли, итерации.

Определение серверов

SELECT memc_servers_set(‘192.168.0.10:11211, 192.168.0.11:11211, 192.168.0.11:11212, 192.168.0.11:11213);

Засовываем десять ключей в тайник

SELECT memc_set(‘key1’, ‘val1’); … SELECT memc_set(‘key10’, ‘val10’);

Берем их из тайника

SELECT memc_get(‘key1’); … SELECT memc_get(‘key10’);

Вроде нормально, возвращает то, что вложил.

Валим одного memcached-демона.

Не понял.

Какого черта.

Почему они ВСЕ живы? Я говорю о данных, которые я закешировал.

ХОРОШО.

Давайте снесем второй.

Ну, мы с этим не согласились.

Они ВСЕ живы.

Ну а что насчет третьего? Блин, все живы.

Ну, так легко нас не возьмешь.

Метода против лома не существует. Валим последнего четвертого демона memcached. То же самое.

Выживших не было.

Мы начинаем убивать, выращивать, хранить, извлекать из.

.

короче, занимайтесь итерациями.

Я НЕ МОГУ УБИТЬ!!! Хм.

Работает. Даже больше.

О, нет. Вы не возьмете нас так легко.

УБИЛИ ВСЕ!!! Я оставил один узел живым.

Я спокойно взял второй.

Не делая никаких вызовов memcached, я сбросил первый.

Всё, я не выжил.

Знайте наш народ, кого хотите, мы вас раком поставим.

Фу.

О чем я говорю? Собственно о PHP. Ну что, пойдём по хатам labs.gree.jp/Top/OpenSource/libmemcached.html Так что слава богу хоть исходников в хате нет github.com/kajidai/php-libmemcached/tree/master Привинтите его.

labs.gree.jp/Top/OpenSource/libmemcached/Document.html Давай попробуем

<Эphp $memcached = new Memcached(); $memcached->addserver('192.168.0.10', 11211); $memcached->addserver('192.168.0.11', 11211); $memcached->addserver('192.168.0.11', 11212); $memcached->addserver('192.168.0.11', 11213); $memcached->set('key1', 'val1'); $ret = $memcached->get('key1'); Echo $ret. “<br>”; …

Этот ублюдок работает. Работает с MySQL. Данные обрабатываются корректно в парах.

Падаем, поднимаем, пишем, читаем – все правильно.

Кстати.

На веб-сервере я испортил файл libmemcached. Какой функционал у нас здесь есть? Неплохо memcached_ctor memcached_server_add memcached_add memcached_add_by_key memcached_append memcached_append_by_key memcached_behavior_get memcached_behavior_set memcached_cas memcached_cas_by_key memcached_delete memcached_delete_by_key memcached_get memcached_get_by_key memcached_set memcached_set_by_key memcached_increment memcached_decrement memcached_prepend memcached_prepend_by_key memcached_replace memcached_replace_by_key memcached_server_list memcached_mget memcached_fetch memcached_server_list_append memcached_server_push получает также отсутствует. А что насчет глюков.

Черт его знает. Я бы хотела узнать.

Ну вообще-то мне не стоит писать автору на моем русском английском в Японию.

Он ответит мне на своем японском английском.

И вот начнется война.

Хорошо, давайте обратимся к источникам.

За свою жизнь я уже написал на C 2,5 строки.

Блин, это так просто.

Ааа, я въехал.

Он только что написал обертку для трансляции звонков с помощью Zend. Блин, здесь наверное негде заморачиваться.

Хорошо.

Подведем итоги.

Во-первых.

Я написал свои первые 2,5 строки на C. Во-вторых.

Теперь у меня есть кетам в PHP. Третий.

Черт побери этот тайник, ты так легко его сбросишь.

В-четвертых.

Мне наплевать, нормальный доступ к данным в memcached, хоть из C, хоть из Perl, хоть из PHP и MySQL. Один закладывает, мне все равно, откуда оно и кто еще его правильно читает. ПС.

Снимаю шляпу перед Брайаном Акером Брайан.

krow.net Теги: #memcached #php #ketama #MySQL #Chulan

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.