2

PHP セットアップに両方の PECL をインストールしましたが、インストールすると、両方が実行されているphp -Vことがわかります。私の/etc/php5/conf.d/フォルダでは、これらの PECL の両方が有効になっています。確認したところ、ポート番号が割り当てられていたので使用されていることがphpinfoわかりました。両方の PECL のファイルに独自の構成がありますが、使用されるのは 1 つだけです。一度に両方を使用できないことはわかっていますが、両方の PECL を一度に 1 つずつテストしたいと考えています。私の質問は、設定を変更するだけで、誰も削除せずにこれらの PECL をテストする方法です。Memcache をテストして無効にし、Memcached をテストしてから、何を使用するかを決定したいと考えています。削除せずに達成できる方法はありますか?PECL/Memcache11211.ini

現在、私はPhpMemcachedAdminを使用して Memcached をチェックしていますが、まだベータ版でバグがあります。誰かが私に他のより良いツールを提案できれば、それは本当に役に立ちます.

4

3 に答える 3

2

両方の拡張機能を同時にアクティブにすることができます。とはPECL Memcache、MemcachedサーバーPECL Memcachedに接続するPHPクライアントです。

長所と短所について

前に述べたように、Memcachedは、memcachedサーバーチームによって維持されているlibmemcachedに基づいて構築されます。人々はそれがより良いと言います、しかし私はその日までこれを確認することができませんでした。

PECL memcacheは、依然としてより優れたPHPセッションサポートを備えています。

私はここで(少し古いですが、ほとんどまだ有効です)比較チャートを見つけまし

編集

PHPは、いずれかの拡張機能を使用してMemcachedサーバーに接続しています。ここにいくつかの使用例があります

PHPでのPECLMemcachedの使用例

PECLMemcachedクラスリファレンス

// create PECL memcached Object
$m = new Memcached();

// add a server, connection is established lazily as far as I know
$m->addServer( 'localhost', 11211 );

// set values, those are written into your server's memory using the memcached server
$m->set( 'integer', 1 );
$m->set( 'intIncrement', 1 );
$m->set( 'intDecrement', 1 );
$m->set( 'string', 'I am a string' );
$m->set( 'array', array( 'a', 'b', 'c' ) );

// increment
$m->increment( 'intIncrement' );

// decrement
$m->decrement( 'intDecrement' );

// get values again
var_dump ( $m->get( 'integer' ) );
var_dump ( $m->get( 'intIncrement' ) );
var_dump ( $m->get( 'intDecrement' ) );
var_dump ( $m->get( 'string' ) );
var_dump ( $m->get( 'array' ) );

// delete values
$m->delete( 'integer' );
$m->delete( 'intIncrement' );
$m->delete( 'intDecrement' );
$m->delete( 'string' );
$m->delete( 'array' );

// close connection
$m->close();

PHPでのPECLMemcacheの使用例

PECLMemcacheクラスリファレンス

これは同じPHPスクリプトに含めることができます!

// create PECL memcache object
$m = new Memcache;

// connect to the memcached server
$m->connect('localhost', 11211);

// set values
$m->set( 'integer', 1 );
$m->set( 'intIncrement', 1 );
$m->set( 'intDecrement', 1 );
$m->set( 'string', 'I am a string' );
$m->set( 'array', array( 'a', 'b', 'c' ) );

// increment
$m->increment( 'intIncrement' );

// decrement
$m->decrement( 'intDecrement' );

// get values again
var_dump ( $m->get( 'integer' ) );
var_dump ( $m->get( 'intIncrement' ) );
var_dump ( $m->get( 'intDecrement' ) );
var_dump ( $m->get( 'string' ) );
var_dump ( $m->get( 'array' ) );

// delete values
$m->delete( 'integer' );
$m->delete( 'intIncrement' );
$m->delete( 'intDecrement' );
$m->delete( 'string' );
$m->delete( 'array' );

// close connection
$m->close();

オブジェクトをmemcachedに保存することもできます。オブジェクトのシリアル化マジッククラスのメソッド __sleepに関するこの記事を__wakeup()、PHPで確認してください。

簡単にわかるように、PECLMemcachedとMemcacheの両方のクライアントの基本的な使用法はほとんど同じです。

于 2012-12-31T01:32:10.770 に答える
1

これを行うための特定の方法はありませんでした。他の構成を使用するには、構成の1つのシンボリックリンクを削除する必要がありました。ファイル全体を削除する代わりに、シンボリックリンクを削除すると非アクティブ.iniになるため、シンボリックリンクのみを削除することが実行可能なオプションに聞こえます。pecl

于 2012-12-30T23:42:34.767 に答える
0

「両方を同時に使用することはできません」という部分を見逃していたに違いありません。誰があなたにそのアイデアを与えましたか? これらは 2 つの別個の拡張機能であり、別個の機能/オブジェクトを備えています。

上記をスキップすると、memcached は memcache 拡張機能よりも多くの機能を実装しているため、使用する方がはるかに優れています (cas は私が最近使用したものの 1 つです)。

2 つ目: 永続的な接続ですか? どうしてそうするか?Memcache は多くの接続をサポートでき、そのために構築されています。永続的な接続は必要ありません。本番アプリでは問題なく、同じ memcached サーバーで 2,000 を超えるヒットがあります。

PS: 「phpinfo を確認したところ、ポート番号 11211 が割り当てられているため、PECL/Memcache が使用されていることがわかりました」は誤りです。拡張機能に関連付けられたポートはありません。PHP 拡張機能自体はデーモン/サービスではありません (ただし、PHP で作成することはできます)。実際には、実際のポートではなく、11211 が memcache サーバーのデフォルト ポートである可能性が高くなります。

于 2012-12-31T01:09:00.830 に答える