Memcached、PHP、ケタマ。 そうでない場合、しかし本当にしたい。

したい。

PHPのKetamuで、少なくともアクセスは何だったのでしょうか。

私はPHPについて話していません。 アクセスに関して。 まあ、PHPからも。



さあ、始めましょう。

何がありますか。

Inet、Google ...

...すべて:(

ああ、ほとんど忘れていました。 最も重要なこと。 天井なので、見つめるのは愚かだった。



だからグーグル。

PHPにはケタムはありません。 それはどこですか。

Gee、last.fmで。

www.lastfm.ru/user/RJ/journal/2007/04/10/rz_libketama_-_a_consistent_hashing_algo_for_memcache_clients

しかし、2007年4月10日以降にのみバージョン0.1.1が更新されることはなく、機能のセットは何とか不足しています。 ダンガ。 comはすでにgets'y、cas'yなどです。 ゴミだらけ。 できることはできますが、それは破壊を理解することです。



さらにGoogle ...

tangent.org



何がありますか。

MySQLのMemcached関数

libmemcached 0.23



すごい!!!!

ライブラリを使用するクライアント:

Ruby: github.com/fauna/memcached/tree/master

Perl: code.google.com/p/perl-libmemcached

Python: code.google.com/p/python-libmemcached

PHP:(日本語) labs.gree.jp/Top/OpenSource/libmemcached.html



PHPのある場所に行きます。

カラウル!!! 小屋。

くそーとバージョン0.1.0。 しかし、新鮮な、2008年9月18日から。 要するに、誰もそれらを探す時間がなかったので、その中の不具合はまだ修正されていません。

...すべて。

これ以上。



さて、試してみます。

おそらく小屋から始めないほうがいいでしょう。

私はブルジョアにいるが、語彙全体は:こんにちは、はい、いいえ、問題、ありがとう、それだけです。

...まあ、もちろんすべてではありません、まだ性交がありますが、彼は私を助けません。

日本語では、彼はあらゆる点で背が低い。



MySQL用のlibmemcachedおよびMemcached関数をデータベースサーバーに配置しました。 Webサーバーlibmemcachedに。

4つのmemcachedデーモンを選択します。 Webサーバー上に1つ、データベースサーバー上に3つ。 なんで? そしてFIGは知っています、それは起こりました。

機能をインストールします。



うーん、リストは印象的です

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



わかりません。 casがある場合? どこに行きますか? なぜcasはgets'aなしで私に降伏した!

さて、それを覚えています。 おそらく。



サーバーを決定します

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







キャッシュに12個のキーを押し込みます

SELECT memc_set('key1', 'val1');



SELECT memc_set('key10', 'val10');








キャッシュからそれらを取ります

SELECT memc_get('key1');



SELECT memc_get('key10');








それは普通のようで、彼らが置いたものを与えます。



現在、memcachedデーモンを1つ削除しています。 予想どおり、2つのキーがカバーされました。 再度、同じキーを10個キャッシュに入れます。

イチジク。 これらの2つの行方不明は現れませんでした。 ケタマは臭いがしません。 まあ、何も、私に読んだreadmeはzapadloではありません。



Memcached Functions for MySQLは何も巧妙なものを見つけませんでした。 Tangent.orgに行きましょう。

くそー、すべてが実行されている方法。



ええ、ここではそれについてのようです

docs.tangent.org/libmemcached/memcached_behavior.html

translate.ruの動作によると、この動作です。

デフォルトでは、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を行う必要があります...

どう?

さらに読みましょう。 すべてを必要とするのはばかげているようです。 まだブルジョアはbyyyyを理解しています。



それはそれのように見えます

単純なオンまたはオフオプションの場合、値1を渡すだけです。

したがって、MEMCACHED_BEHAVIOR_KETAMAセット1が必要です。



さて、試してみましょう。

SELECT memc_servers_behavior_set ('MEMCACHED_BEHAVIOR_KETAMA', 1);







Mdaaa。 カーディクがいっぱいです。

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-> distribution = MEMCACHED_DISTRIBUTION_MODULA;

2つのよく知られた言葉。



そして、名前の構成には有望です:memcached_st * memcached_create(memcached_st * ptr)。

では、memcached_stが誰であるかを理解してみましょう。

おそらく理解できる。 libmemcached.podによると、translate.ruがすべてを正しく説明してくれた場合、これは私が必要とするものではない場所です。

再びtangent.orgに行きます。 Confはそこにありませんが、Maylinワーム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;と書きます。

わあ Cでの私の人生の最初の0.5行



代わりに、ptr-> retry_timeout = 0;

ptr-> retry_timeout = 60;と書きます。



Yyyyyyyyy。 代わりに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);







キャッシュに12個のキーを押し込みます

SELECT memc_set('key1', 'val1');



SELECT memc_set('key10', 'val10');








キャッシュからそれらを取ります

SELECT memc_get('key1');



SELECT memc_get('key10');








それは普通のようで、彼らが置いたものを与えます。



memcachedデーモンを1つ削除しています。

わかりません。 なんてこった。 なぜ彼らはすべて生きているのですか? これは、キャッシュに入れたデータについての私です。



わかった 2番目のValim。

まあ、私たちは同意しませんでした。 彼らはすべて生きています。



まあ、3番目の場合。

くそー、みんな生きている。



まあ、あなたは私たちを取ることはできません。 スクラップに対する受付はありません。 最後の4番目のmemcachedデーモンを取得します。

同じこと。 生存者はいません。

私たちは殺し、育て、救い出し、抜け出し始めます...

...短い反復。

殺せない!!!



うーん。 動作します。 それ以上。



いえいえ あなたは私たちを連れて行かないでしょう。

すべて殺された!

彼は1つのノードを生き残った。 静かに2番目に発生しました。 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で動作します。

正確には、データはペアで処理されます。

私たちは倒し、持ち上げ、書き、読みます-すべてが正しいです。



ああ、ところで。 Webサーバー上で、切断された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



そこにも行きます。



そして、グリッチはどうですか...

そしてFIGは彼を知っています。

見つけるために。 実は、ロシア語の英語で同じ著者を日本に書いてはいけません。 結局のところ、彼は日本語の英語で答えてくれるでしょう。

そして、戦争が始まります。



さて、ソースに入りましょう。 結局、私はすでに合計で2.5行ものCを書いています。



くそー、それはとても簡単です...

ああ、運転した。 彼は単にzendで呼び出しをブロードキャストするためのラッパーを作成しました。 くそー、おそらくそれをする場所は他にないでしょう。



まあ何。

まとめると。



第一に。 私はCで最初の2.5行を書きました。

第二に。 PHPにはケタムがあります。

第三に。 このキャッシュを簡単にダンプしてください。

4番目。 memcachedのデータへの通常のアクセスから、少なくともCから、少なくともPerlから、少なくともMySQLを使用したPHPから保存します。 1つは嘘です、どこで誰が正しく読むかを気にしません。



PS。 ブライアン・アーカーに敬意を表するbrian.krow.net



All Articles