ホームページ  >  記事  >  バックエンド開発  >  PHP モジュール: Memcached > Memcache

PHP モジュール: Memcached > Memcache

WBOY
WBOYオリジナル
2016-06-23 14:31:28806ブラウズ

PHP と Memcached の組み合わせは、女性や子供の間ではすでによく知られた標準です。もう一度言及するのはあまりにも「?」ですが、誰もが気づいていない詳細がいくつかあります。たとえば、PECL には Memcache と Memcached という 2 つの Memcached モジュールがあり、現在、ほとんどの PHP 環境ではこのモジュールが使用されていません。同じ名前です。d が付いた Memcache バージョンは以前にリリースされたネイティブ バージョンであり、d が付いた対応する Memcached バージョンは libmemcached に基づいているため、Memcached バージョンの方がより完全な機能を備えています。

PHP モジュールの Memcached バージョンをインストールします

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"
インストールが完了したことは、次のコマンドで確認できます。

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

まず、カウンターの初期値が整数であり、各インクリメントが get/set によって完了すると仮定します。

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 にはない多くの機能もあります。どの拡張機能を使用するかについては詳しく説明しません。使用は自明です。

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