1. 4 つの Memcached サービス シミュレーション クラスターを開始します
/usr/local/memcached/bin/memcached -d -p 11211 -u memcached -vv >> /var/log/memcached.11211.log 2>&1 /usr/local/memcached/bin/memcached -d -p 11212 -u memcached -vv >> /var/log/memcached.11212.log 2>&1 /usr/local/memcached/bin/memcached -d -p 11213 -u memcached -vv >> /var/log/memcached.11213.log 2>&1 /usr/local/memcached/bin/memcached -d -p 11214 -u memcached -vv >> /var/log/memcached.11214.log 2>&1
2. モジュラー ハッシュ アルゴリズム
php コード
<?php /** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/28 * Time: 11:38 */ $memcached = new Memcached(); //设置算法为取模hash $memcached->setOptions( array( Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_MODULA, //Memcached::OPT_LIBKETAMA_COMPATIBLE => true, Memcached::OPT_REMOVE_FAILED_SERVERS=> true, ) ); //添加服务器 $memcached->addServer('192.168.75.132', '11211'); $memcached->addServer('192.168.75.132', '11212'); $memcached->addServer('192.168.75.132', '11213'); $memcached->addServer('192.168.75.132', '11214'); //写入12个key for ($i =1;$i <= 12;$i++){ $memcached->set('key_'.$i, 'value_'.$i); }
上記のコードを実行してログを確認します
#memcached.11211.log <28 new auto-negotiating client connection 28: Client using the ascii protocol <28 set key_2 0 0 7 >28 STORED <28 set key_3 0 0 7 >28 STORED <28 set key_4 0 0 7 >28 STORED <28 set key_10 0 0 8 >28 STORED <28 quit <28 connection closed. #memcached.11212.log <28 new auto-negotiating client connection 28: Client using the ascii protocol <28 set key_1 0 0 7 >28 STORED <28 set key_6 0 0 7 >28 STORED <28 set key_9 0 0 7 >28 STORED <28 set key_12 0 0 8 >28 STORED <28 quit <28 connection closed. #memcached.11213.log <28 new auto-negotiating client connection 28: Client using the ascii protocol <28 set key_7 0 0 7 >28 STORED <28 set key_8 0 0 7 >28 STORED <28 quit <28 connection closed. #memcached.11214.log <28 new auto-negotiating client connection 28: Client using the ascii protocol <28 set key_5 0 0 7 >28 STORED <28 set key_11 0 0 8 >28 STORED <28 quit <28 connection closed.
キーの配布を表示
##PHP コードの 11214//$memcached->addServer( をコメントアウトします。 192.168.75.132', '11214');php コードを再度実行します
キーの分布を表示します
key_2 と key_10 のヒットは変更されておらず、常に 11211 です。他の 10 個のキーのヒットは、サーバーの削減により変更されました
3. 一貫したハッシュ アルゴリズム
PHP コード<?php /** * Created by PhpStorm. * User: jmsite.cn * Date: 2019/1/28 * Time: 11:38 */ $memcached = new Memcached(); //设置算法为一致性hash $memcached->setOptions( array( Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT, Memcached::OPT_LIBKETAMA_COMPATIBLE => true, Memcached::OPT_REMOVE_FAILED_SERVERS=> true, ) ); //添加服务器 $memcached->addServer('192.168.75.132', '11211'); $memcached->addServer('192.168.75.132', '11212'); $memcached->addServer('192.168.75.132', '11213'); $memcached->addServer('192.168.75.132', '11214'); //写入12个key for ($i =1;$i <= 12;$i++){ $ret = $memcached->set('key_'.$i, 'value_'.$i); }
PHP コードを再度実行します
キーの分布を表示します
#2 つのキーの分布を比較します。
11211 元のキー ヒットは変更されておらず、key_4 が追加されました
11212 元のキー ヒットは変更されていません
11213 元のキー ヒット 変更は発生せず、key_12 が追加されました
サーバー ヒットの減少により変更されたキーが 2 つあります
4. 比較モジュロ ハッシュ アルゴリズム 1 つのサーバーでのキー ヒット数を 10 回に減らすことが変更されました。
一貫性のあるハッシュ アルゴリズムが変更され、1 つのサーバーでの 2 つのキー ヒットが減少しました。
ここでは 12 個のキーのみがテストされています。シミュレートされたデータ量が小さすぎるため、キーの分布が不均一になります。ただし、サーバーの削減によるキー ヒットの変化は、サーバーのサイズとは関係ありません。シミュレートされたデータですが、ハッシュ アルゴリズムに関連しています。これらのテストは、一貫したハッシュ アルゴリズムの利点を反映しています。サーバーの削減により、多数のキーのモジュラー ハッシュ結果が変化し、サーバーのヒットも変化しました。 ; 一貫性のあるハッシュ アルゴリズムのキーは 2^32-1 の値に固定されていますが、ノードのハッシュ リングでは、サーバーがキーを減らしても、ハッシュ リング上のサーバーのキーの位置は変わりません。ヒットにのみ影響します。縮小されたサーバー上のキーの。サーバーを追加すると、ハッシュ リングの次の位置にあるサーバーのキーの一部にのみ影響します。
以上がPHP モジュロ ハッシュと一貫したハッシュ操作 Memcached 分散クラスターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。