たとえば、PECL には Memcache と Memcached という 2 つの Memcached モジュールがあります。現在、ほとんどの PHP 環境では、名前に d が含まれていない Memcache バージョンが使用されており、d が含まれる Memcached バージョンは libmemcached に基づいています。 , そのため、Memcached バージョンの方が機能が充実しています。
Memcached バージョンの PHP モジュールをインストールします
wget http://download.tangent.org/libmemcached-0.35.tar.gz
tar zxf libmemcached-0.35.tar.gz
cd libmemcached-0.35
./ configure
make
make install
wget http://pecl.php.net/get/memcached-1.0.0.tgz
tar zxf memcached-1.0.0.tgz
cd memcached-1.0.0
phpize
./ configure
make
make install
php.ini を開き、次を追加します:
extension = "memcached.so"
次のコマンドでインストールが完了したことを確認できます。
デモ Memcached 版の新機能
まず、counter の初期値が整数であると仮定して問題を作り、increment メソッドを使用せず、get/set によって毎回 1 ずつインクリメントを完了します。 Memcache バージョンでは、次のように続行することしかできません:
$m = new Memcache();
$m->addServer('localhost', 11211);
$v = $m- >get( 'counter');
$m->set('counter', $v + 1);
get/setの2つのアクションはアトムとして操作できないため、複数の処理を同時に処理する場合、紛失する可能性があり、さらに厄介なのは、いつ紛失するかわからないことです。
Memcached バージョンでそれを行う方法を見てみましょう:
$md = new Memcached();
$md->addServer('localhost', 11211);
$v = $md->get ( 'counter', null, $token)
$md->cas($token, 'counter', $v + 1);
cas は、端的に言うと Memcached 版で提供されている関数です。オプティミスティック ロック関数を使用して、$token の値を var_dump すると、$token が実際にはバージョン番号であることがわかります。get で取得した $token のバージョン番号が cas 中に一致しない場合は、他の操作が更新されたことを意味します。この時点では、cas 操作は失敗します。操作を続行する方法はあなた次第です。
注: 競合状況を手動で再現したい場合は、get と cas の間に数秒間スリープし、2 つのスクリプトをコピーして、順番に実行します。
ちなみに、Memcached バージョンモジュールの推奨ハッシュ設定は以下の通りです:
$md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$md->setOption(Memcached:: OPT_HASH, Memcached::HASH_CRC);
概要
Memcached バージョンには、getByKey、setByKey などを介して複数のサーバーを自動的にサポートするなど、Memcache にはない多くの機能もあります。詳細については説明しません。使用する拡張子は自明です。
追加:
http://code.google.com/p/memcached/wiki/PHPClientComparison
http://www.bkjia.com/PHPjc/323692.html
www.bkjia.com