ホームページ >php教程 >php手册 >PHP モジュール Memcached には Memcache より多くの機能があります

PHP モジュール Memcached には Memcache より多くの機能があります

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-21 08:53:59964ブラウズ

たとえば、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"

次のコマンドでインストールが完了したことを確認できます:

php -m grep mem

Memcached バージョンの新機能をデモンストレーションします

まず、カウンターの初期値が整数であると仮定して問題を作成します。インクリメント メソッドは使用しません。 get/set を通じて毎回 1 つ追加します。

Memcache バージョンでは、次のように続行することしかできません:

$m = new Memcache();
$m->addServer('localhost', 11211);
$v = $m->get('counter');
$m->set('counter', $v + 1);

get/ による 2 つのアクションof set はアトムとして操作できないため、複数のプロセスが同時に処理すると、損失が発生する可能性があります。さらに厄介なのは、いつ損失が発生するかわからないことです。

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 のバージョン番号が取得できることがわかります。 through get が cas 操作に対応していない場合は、他の操作が更新されたことを意味します。この時点で cas 操作は失敗します。操作を続行するかどうかは、ユーザー次第です。

注: 競合状況を手動で再現したい場合は、get と cas の間で数秒スリープし、2 つのスクリプトをコピーして、順番に実行します。

ちなみに、Memcached バージョンモジュールの推奨ハッシュ設定は以下の通りです:

$md->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$md ->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);


概要
Memcached バージョンには、Memcache にはない多くの機能もあります。 getByKey、setByKey など、複数のサーバーが自動的にサポートされる場合、どの拡張機能を使用するかは自明のことです。


補足: http://code.google.com/p/memcached/wiki/PHPClientComparison



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。