以前 memcache を使用しようとしましたが、後で memcached が setMulti メソッドをサポートしていることがわかり、memcached ライブラリの使用に切り替えるつもりです。
(試してみました。実際、memcache は複数値セットをサポートしたことがありませんでしたが、ドキュメントにはまだ記載されていません。変更ログによると、3.0 からサポートされるようです。安定版にはこの機能がない可能性があります。 .)
効率に関しては、どれくらいの差が出るのかは分かりません。
ここには、memcached が libmemcached に基づいており、より優れている可能性があるという記事もあります。
最後に、libmemached に基づく php 拡張機能が pecl でリリースされました。
つまり、pecl には 2 つの memcache クライアントが存在します。 1 つは完全に PHP フレームワーク memcache 内で開発され、もう 1 つは libmemcached を使用する memecached です。
関数に関しては、libmemcached を見たことがありませんが、理論的には、すでに他の言語で非常に人気のある libmemcached の方がより完全な関数を備えているはずです。プログラムのパフォーマンス (メモリと CPU 使用率) については、何とも言えません。pecl::memcache はネイティブに実装されていますが、libmemcached を使用する pecl::memached は OO インターフェイスのみをサポートし、pecl::memcache は OO インターフェイスと非 OO インターフェイスの両方をサポートします。ソケットの共存が重みになります。
実際、これらは最も重要ではありません。 libmemcached を使用する明らかな利点は、memcached サーバーが将来改良されるにつれて、このライブラリもすぐに追随することになるということです。ただし、pecl::memcache は時間通りにフォローアップできない可能性があります。
pecl::memcached のもう 1 つの非常に賞賛に値する点は、動作中にフラグが設定されないことです。代わりに、統合された setOption() があります。この方法では、pecl::memcache から pecl::memcached に切り替えることは非常に価値があります。特定のインターフェイスはここにあります: http://cvs.php.net/viewvc.cgi/pecl/memcached/memcached-api.php?view=markup
ドライバーベースのアーキテクチャにできるかどうかについては pecl-dev@ で述べました。現在の MySQL と同様に、基礎となるエンジンとして mysqlnd または libmysql を使用することを選択できます。しかし、よく考えてみると、実際には、memcached でそのようなアーキテクチャを使用することはあまりサポートされていません。これは MySQL とは異なります。
mysqlnd は新しい API ではなくエンジンとして開発されているため、多数のアプリケーションがデータベース操作を変更することなく新しいエンジンを使用できるようになります。 mysqlnd が新しい拡張機能である場合、以前のプログラムと互換性を持たせたい場合は、非常に難しい選択に直面することになります。なぜなら、これまでのところ、libmysql を使用し、異なる外部インターフェイスを持つ 3 つの公式 MySQL クラス セットがあるからです。 Mysqlnd は mysql と互換性がありますが、mysqli または pdo とは互換性がありません。もちろん、独自の抽象データベース クラスを使用するプログラムの場合、互換性を確保するためにクラスを書き直すかドライバー (php レベル) を変更することでこれを実現できます。しかし、考えてみてください。抽象ライブラリを使用するとしても、世界中には非常に多くのデータベース抽象ライブラリがあり、誰でも手頃な価格で利用できるようにするには、どれだけのライブラリを変更し、どれだけのドライバを追加する必要があります。
memcached の状況ははるかに単純です。現時点では、公式システムとより密接な関係があるのは pecl::memcache だけであり、インターフェイスは基本的に libmemcache とほぼ同じ memcached プロトコルに基づいています。実際には、これらは抽象クラス内の異なるドライバーとみなすことができます。したがって、2 つの異なるクライアントのセットがありますが、それらを置き換えるときに変更を加える必要はほとんどありません。必要なのは、クラスが初期化される場所を変更し、set/get およびその他のメソッドのフラグを削除することだけです。非 OO インターフェイスを使用します。
さらに、mysql は通信とデータ取得において memcache よりも複雑で、libmysql ではできないことがいくつかあります。たとえば、PHP 内の HashTable と zval を使用してバッファを直接保存できます。たとえば、永続リンクである一部の構造をさらにキャッシュできます。 (これらは単なる私の推測であり、mysqlnd のコードを読んでいません)
Memcached マニュアル:
http://cn.php.net/manual/en/book.memcached.php
Memcache マニュアル:
http://cn.php.net/manual/en/book.memcache.php
中国語と英語の Memcached プロトコル