-
- # tar -xzf libevent-1.1a.tar.gz
- # cd libevent-1.1a
- # ./configure --prefix=/usr
- # make
- # make install
- # cd ..
- # tar -xzf memcached-1.1.12.tar.gz
- # cd memcached-1.1.12
- # ./configure --prefix=/usr
- # make
- # make install
复制代
インストールが完了すると、memcached は /usr/bin/memcached にあるはずです。 3. memcached デーモンを実行します。 memcached デーモンの実行は非常に簡単です。コマンド ラインを必要とするだけです (変更する必要がある構成ファイルはありません)。 d -m 128 -l 192.168.1.1 -p 11211 -u httpd パラメータの説明: -d はデーモン モードで memcached を実行します。
-m は、memcached が使用できるメモリ サイズを M 単位で設定します。
-l は、監視 IP アドレスを設定します。ローカル マシンの場合、通常、このパラメータを設定する必要はありません。
-p はリスニング ポートを設定します。デフォルトは 11211 であるため、このパラメータを設定する必要はありません。
-u はユーザーを指定します。現在 root である場合は、このパラメーターを使用してユーザーを指定する必要があります。もちろん、man memcached を実行すると、他にも使用できるパラメーターが表示されます。
3. memcached の動作原理: まず、memcached は 1 つ以上のサーバーでデーモンとして実行され、クライアント接続操作をいつでも受け入れます。現在知られているクライアント API には、Perl/PHP /Python/Ruby などがあります。 /Java/C#/C などPHP などのクライアントが memcached サービスとの接続を確立したら、次にアクセスするオブジェクトには一意の識別子キーがあり、アクセス操作は memcached に保存されます。 、キャッシュ ファイルに保存されないため、memcached は非常に効率的かつ高速になります。
これらのオブジェクトは永続的ではないため、サービスが停止されると内部のデータが失われることに注意してください。
4. PHP を memcached クライアントとして使用するには 2 つの方法があります。
PHP を memcached クライアントとして使用して、オブジェクト アクセス操作のために memcached サービスを呼び出すことができます。
まず、PHP には memcache という拡張機能があります。Linux でコンパイルする場合、Windows では、php.ini の php_memcache.dll の前のコメントを削除する必要があります。 。
また、展開や再コンパイルによるトラブルを回避するには、php-memcached-client を直接使用する方法もあります。
この記事では2番目の方法を使用しますが、拡張ライブラリよりも若干効率は悪くなりますが、大きな問題はありません。 4. PHP memcached アプリケーションの例 まず、memcached-client.php をダウンロードします。ダウンロード後、このファイル内のクラス「memcached」を通じて memcached サービスを操作できます。実際、コード呼び出しは非常に単純です。使用される主なメソッドは、add()、get()、replace()、および delete() です。メソッドの説明は次のとおりです。 )
オブジェクトを memcached に書き込みます。$key はオブジェクトの一意の識別子です。$exp は秒単位の有効期限です。
オブジェクトの一意の識別子 $key replace ($key, $value, $exp=0) を通じて memcached からオブジェクト データを取得します。
$value を使用して、memcached の識別子 $key に置き換えます。パラメーターは、$key オブジェクトが存在する場合にのみ機能します ($key, $time = 0)。
memcached 内の識別子 $key を持つオブジェクトを削除します。 $time は、削除するまでの待機時間を示すオプションのパラメーターです。
以下は、識別子「mykey」を持つオブジェクト データにアクセスする簡単なテスト コードです。
- // memcached クラス ファイルが含まれます
- require_once('memcached-client.php');
- // オプション設定
- $options = array(
- 'servers' => array('192.168.1.1:11211 '), //memcached サービスのアドレスとポート、複数の配列要素を使用して複数の memcached サービスを表すことができます
- 'debug' => true, //デバッグがオンかどうか
- 'compress_threshold' => 10240, //単語数を超えている セクション内のデータを圧縮します
- 'persistant' => false //永続的な接続を使用するかどうか
- ); memcached オブジェクトのインスタンスを作成します
- $mc = new memcached($options);このスクリプトで使用される一意の値を設定します 識別子
- $key = 'mykey'
- // memcached にオブジェクトを書き込みます
- $mc->add($key, 'some Random strings');
- $val = $mc-> ;get($key );
- echo "n".str_pad('$mc->add() ', 60, '_')."n";
- var_dump($val);オブジェクトデータ値
- $mc->replace($key, array('some'=>'haha', 'array'=>'xxx'));
- $val = $mc->get($ key);
- echo "n".str_pad('$mc->replace() ', 60, '_')."n";
- var_dump($val); ->delete($key);
- $val = $mc->get($key);
- echo "n".str_pad('$mc->delete() ', 60, '_')。 "n ";
- var_dump($val)
- ?>
-
-
- コードをコピーします
-
- 実際のアプリケーションでは、データベース クエリの結果セットは通常 memcached に保存され、次回アクセスするときにデータベース クエリ操作を実行する代わりに memcached から直接取得されます。これにより、データベースへの負担を大幅に軽減できます。かなりの程度。通常、SQL ステートメント md5() の後の値が一意の識別子のキーとして使用されます。
以下は、memcached を使用してデータベース クエリ結果セットをキャッシュする例です (このコード スニペットは上記のサンプル コードに従っています)。
$sql = 'SELECT * FROM users'; - $key = md5($sql); //memcached オブジェクト識別子
- {
- // キャッシュされたデータが memcached で取得されない場合は、データベース クエリを使用します。レコードセット。
- echo "n".str_pad('MySQL からデータを読み取ります。', 60, '_')."n" = mysql_connect('localhost', 'test', 'test'); test');
- $result = mysql_query($sql);
- while ($row = mysql_fetch_object($result))
- $datas[] = $row
- // データベースから取得した結果セットのデータを memcached に保存します。次回の訪問のために。
- $mc->add($key, $datas);
- {
- echo "n".str_pad('memcached からデータを読み取ります。', 60, '_')."n";
- }
- var_dump($) datas);
- ?>
-
-
- コードをコピー
-
memcached を使用すると、データベース接続とクエリ操作が削減され、データベースの負荷が軽減され、スクリプトの実行速度も向上することがわかります。 。以前「PHP は SESSION データのマルチサーバー共有を実装する」という記事を書きました。その記事内の SESSION は、同時アクセス数が多いと、サーバーの負荷が非常に大きくなります。 MySQL の最大接続数を超えている場合、memcached を使用すると、この問題をうまく解決できます。原理は次のとおりです。
ユーザーが Web ページにアクセスすると、memcached に現在のユーザーの SESSION データがあるかどうかを確認し、データが存在する場合は session_id() を一意の識別子として使用します。データが存在しない場合は、直接接続します。データベースに再度アクセスし、SESSION データを取得し、次回使用するためにこのデータを memcached に保存します。
現在の PHP 操作が終了する (または session_write_close() が使用される) と、My_Sess::write() メソッドが呼び出され、データベースにデータが書き込まれます。この場合も、このメソッドは毎回データベース操作を実行します。最適化する必要があります。ユーザーがページに入ったときにグローバル変数を使用して SESSION データを記録し、このデータを write() メソッドで比較して、書き込みたい SESSION データと同じかどうかを確認します。異なる場合は、に接続します。データベースに書き込み、同時に memcached 内の対応するデータを追加します。それらが同じであれば、SESSION データは変更されていないことを意味するため、何もせずに直接戻ることができます。操作
それでは、ユーザーの SESSION 有効期限を解決するにはどうすればよいでしょうか? memcached の add() メソッドには有効期限パラメータ $exp があることを覚えていますか?このパラメータ値を SESSION の最大生存時間未満に設定するだけです。また、常にオンラインのユーザーの場合は、条件が満たされた場合にデータベースのデータが更新されるように、write() メソッドで解決できます。
php memcached クライアント memcached
memcache をインストールしたときに、memcached クライアントは memcache と呼ばれると言いましたが、実際には、libmemcached をベースにした memcached というクライアントがあり、よりパフォーマンスが良く、より多くの機能があると言われています。
memcache の公式ホームページ: http://pecl.php.net/package/memcache
Memcached の公式ホームページ: http://pecl.php.net/package/memcached
以下は、Memcached バージョンの PHP モジュールをインストールするプロセスの記録です。
$mem = 新しい Memcache; $mem->addServer($memcachehost, '11211'); $mem->set('hx','9enjoy'); echo $mem->get('hx');$md = 新しい Memcached
- $servers = array(
- array($memcachehost, '11211'),
- array($memcachehost, '11212')
- );
- $md->addServers($servers); '9enjoy');
- echo $md->get('hx');
-
-
-
- コードをコピー
-
-
memcached には、getMulti、getByKey、addServers など、memcache よりも多くのメソッドがあります。
Memcached には memcache の connect メソッドがなく、現時点では長時間の接続はサポートされていません。
Memcached はバイナリ プロトコルをサポートしていますが、memcache はサポートしていません。つまり、memcached の方がパフォーマンスが高くなります。
Memcache はネイティブに実装されており、OO インターフェイスと非 OO インターフェイスの両方の共存をサポートします。Memcached は libmemcached を使用し、OO インターフェイスのみをサポートします。
詳しい違い: http://code.google.com/p/memcached/wiki/PHPClientComparison
memcached サーバーは集中型キャッシュ システムであり、分散実装方法はクライアントによって決定されます。
memcached の分散アルゴリズムには通常 2 つのオプションがあります。
1. hash(key) の結果に従って、モジュラー接続番号の残りの部分、つまり hash(key)% session.size() が決定されます。このアルゴリズムはシンプルで高速であり、パフォーマンスも良好です。ただし、このアルゴリズムには欠点があり、memcached ノードを追加または削除すると、元のキャッシュ データが大規模に無効になり、ノードやキャッシュ データが多数ある場合、ヒット率に大きな影響を与えます。キャッシュを再構築するコストが高すぎるため、2 番目のアルゴリズムを使用します。
2. Consistent Hashing、一貫したハッシュアルゴリズム、そのノード検索プロセスは次のとおりです:
まず、memcached サーバー (ノード) のハッシュ値を見つけて、0 から 232 までのサークル (連続体) 上に設定します。次に、同じ方法を使用して、データを保存しているキーのハッシュ値を見つけ、それをサークルにマッピングします。次に、データがマッピングされている場所から時計回りに検索し、最初に見つかったサーバーにデータを保存します。 2 の 32 乗を超えてもサーバーが見つからない場合は、最初の memcached サーバーに保存されます。
Memcache は、構成を行わずに最初の方法を使用します。最初のメソッドを実装するために、memcached は次のものを使用するようです (未確認)。
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);
2 番目のコンシステント ハッシュ アルゴリズム:
memcacheはphp.iniに追加されます
Memcache.hash_strategy =一貫性のある
Memcache.hash_function =crc32
memcached がプログラムに追加されました (未確認)
$md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);
または
$mem->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
$mem->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);
|