いつMemcachedではなくMemcacheを使用する必要がありますか?


321

PHPにはmemcachememcachedという2つのmemcachedライブラリがあるようです。違いは何ですか?どの方法を使用するかをどのようにして知っていますか?古くなっていますか?memcachedはより多くのメソッドを提供しているようですので、それが最も開発が進んだことを意味すると思いますが、外部C / C ++ライブラリも必要とするため、インストールできるかどうかわかりません。

memcacheは以前よりも古く、追加のライブラリーを必要とせず、Windows用のコンパイル済みバイナリーもあるようです!今のところ、それが良い選択だと思います。ただし、me​​mcached(サーバー)を初めて使用する場合、memcached(php)に追加のトラブルに値する非常に重要な機能があるかどうかはわかりません。


1
ZendConには、両者を比較する素晴らしいエピソードがあります。ZendConセッションエピソード040:Memcached:より優れたMemcacheインターフェース
John Magnolia

serverfault.com/questions/63383/memcache-vs-memcachedの複製がほんの数日分ですが、これはより多くのビューと投票を得ました:)
Stefano

回答:


249

Memcachedクライアントライブラリは最近、安定版としてリリースされました。これはdigg(Andrei Zmievskiによってdiggのために開発されましたが、現在はdiggを使用していません)によって使用されており、以前のmemcacheクライアントよりもはるかに多くのmemcachedプロトコルを実装しています。memcachedの最も重要な機能は次のとおりです。

  1. Casトークン。これにより、私の生活がはるかに簡単になり、古いデータを簡単に防止できるシステムになりました。キャッシュから何かをプルするときはいつでも、それを使ってcasトークン(2つの数値)を受け取ることができます。その後、そのトークンを使用して、更新されたオブジェクトを保存できます。スレッドの実行中に他の誰も値を更新しなかった場合、スワップは成功します。そうでない場合は、新しいcasトークンが作成され、データをリロードして新しいトークンで再度保存することを強制されます。
  2. スライスされたパン以来、コールバックの読み取りは最高です。それは私のコードの多くを簡素化しました。
  3. getDelayed()は、スクリプトがサーバーから結果が返されるのを待つ必要がある時間を短縮できる優れた機能です。
  4. memcachedサーバーは非常に安定しているはずですが、最速ではありません。新しいクライアントでは、ASCIIの代わりにバイナリプロトコルを使用できます。
  5. 複雑なデータをmemcachedに保存するときはいつでも、クライアントは常に値のシリアル化(遅い)を行っていましたが、今ではmemcachedクライアントではigbinaryを使用するオプションがあります。これまでのところ、パフォーマンスがどれほど向上するかをテストする機会がありませんでした。

これらすべての点は、私が最新のクライアントに切り替えるのに十分であり、それが魅力のように機能することを伝えることができます。libmemcachedライブラリには外部からの依存関係がありますが、それでもUbuntuとMac OSXにインストールできるため、これまでのところ問題はありません。

新しいライブラリに更新する場合は、最新のサーバーバージョンに更新することをお勧めします。また、いくつかの優れた機能も備えています。コンパイルするにはlibeventをインストールする必要がありますが、Ubuntuではそれほど問題ではありませんでした。

これまでフレームワークが新しいmemcachedクライアントを取得することはありませんでした(ただし、追跡はしていません)が、Zendがまもなく参加するものと思います。

更新

Zend Framework 2にはMemcached用のアダプターがあり、ここで見つけることができます


1
素晴らしい答え。また、libmemcachedへの外部依存は、この場合、実際にプラスになります。これは、活発に開発されているクライアントの1つだからです。
マルクボリンジャー

同意した。libmemcachedの外部依存関係は、libeventと同様に、問題とは見なされません。
Miha Hribar

1
そのCas Tokensのことは最大のプラスのように聞こえます。実際、これらの機能を見ると、memcachedは、DBなどのマネージドデータホルダーに向かっており、一時キャッシュにはあまり向いていないようです。
Xeoncross 2009

あなたがそれを探しているなら、あなたはすでにmemcachedb(memcachedb.org)を持っています。これは実際にはmemcachedプロトコルを話す単なるBerkley DBです。
Miha Hribar

8
この答えは、memcacheとmemcachedの違いすらわかりません?!memcacheはmemcachedの古いバージョンだけですか?
Daniel W.

10

Windowsを使用している場合、比較は省略されmemcacheます。利用可能な唯一のクライアントのようです。


常にmemcached自分で拡張機能を追加できませんか?
Pacerier、2015年

1
これが実際に本当であるようには見えません。commaster.net/content/installing-memcached-windows
Joe Leonard

@JoeLeonardリンク先のページ:「memcachedPHPでインターフェースするには、PHP memcache用の拡張機能をインストールする必要があります」
rymo

8

これは2013年です。2009年のコメントは忘れてください。同様に、深刻なトラフィック負荷をかけている場合は、Windowsベースのmemcacheを使用して行う方法についても考慮しないでください。非常に大規模な(500以上のフロントエンドWebサーバー)および20以上のバックエンドデータベースサーバーとレプリカント(mysqlとmssqlの組み合わせ)を扱う場合、memcachedサーバーのファーム(グループ内の12サーバー)は、25Kに応答する複数の大容量OLTPアプリケーションをサポートします〜40K mc-> get呼び出し/秒。これらの呼び出しは、データベースに到達する必要がない呼び出しです。

私見、memcachedのこの使用により、新しいDBサーバーとライセンス、および大規模な商用設計のサポート契約のCAPEXに重大な$$$、$$$の節約が提供されました。


48
これは、phpのmemcacheプロトコルの2つの実装の違いに関する質問にどのように答えますか?
Marki555 2016年

9
これはコメントであるべきです。
Elijah Lynn

7

Memcachedは新しいAPIであり、サーバーファームがある場合に最適なセッションプロバイダーとしてmemcachedも提供します。

バージョンがまだ非常に低い0.2の後、私は両方を使用しましたが、大きな問題は発生しなかったので、新しいのでmemcachedに行きます。


1
どちらも使用したくありませんが、どちらも実際にはセッションハンドラとして機能します。us3.php.net/manual/en/memcache.examples-overview.php
Xeoncross

良い点は悪い点です。ええ、それはioが非常に重要になったときに大きなサーバーで本当に役立つだけです。それに加えて、memcacheは、オブジェクトをドロップしてメモリを取得しないことを検証しないため、物事をスケーリングする方法を知るのが難しいです。
RageZ 2009

1
0.2バージョンは、安定した1.0.0バージョンを上回っています。
Miha Hribar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.