Мемкеш, 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
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2013-10-11 21:44:44
Баллов опыта: 597
Всего постов на сайте: 5
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

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