web-dev-qa-db-ja.com

memcache対memcached?

Memcachedを使用したい

http://www.danga.com/memcached/

yum install memcachedからインストールしました

しかし今、私はPHPに接続する必要があり、memcacheという名前の拡張とmemcachedという名前の拡張がありますか? ARGH

http://us3.php.net/manual/en/book.memcache.php
http://us3.php.net/manual/en/book.memcached.php

誰かが私をここで正しい方向に向けることができますか?どちらが機能するでしょうか?

また、ローカルであっても機能するためにポートを開く必要がありますか?実行した後、telnet 127.0.0.1 11211を試してみると、接続が拒否されます。

76
thanksyo

短い答え:どちらがあなたが探しているものですが、私の最初の選択はmemcache(最初にリストしたもの)、純粋に命名法の正しい使用に基づくです。

これが私がその結論に至った経緯です。

以下は、命名規則(見知らぬ人のための)の簡単な背景であり、質問者によるフラストレーションを説明しています。多くの* nixアプリケーションでは、バックエンド作業を行う部分は「デーモン」と呼ばれます(Windowsでは「サービス」と考えます)。ランド)、インターフェースまたはクライアントアプリケーションは、デーモンの制御またはアクセスに使用するものです。ほとんどの場合、デーモンにはクライアントと同じ名前が付けられ、「d」の文字が追加されます。たとえば、「imap」は「imapd」デーモンに接続するクライアントです。

memcacheモジュールの概要(この抜粋のmemcacheとmemcachedの違いに注意してください)を読んだとき、この命名規則はmemcacheによって明確に守られています。

Memcacheモジュールは、動的Webアプリケーションでのデータベースの負荷を減らすように特別に設計された、非常に効果的なmemcachedキャッシュデーモンへの便利な手続き型およびオブジェクト指向のインターフェイスを提供します。

Memcacheモジュールは、セッションハンドラー(memcache)も提供します。

Memcachedの詳細については、" http://www.danga.com/memcached/ を参照してください。

ここでの不満は、PHP拡張機能の作成者memcachedと呼ばれる実際のデーモンと同じ名前を共有するためmemcachedmemcached(phpモジュール)の紹介では、使用される共有ライブラリ(またはAPI)であるlibmemcachedについても言及していることに注意してください。 memcachedデーモンにアクセスするモジュール:

memcachedは、高性能な分散メモリオブジェクトキャッシングシステムであり、本質的に汎用的ですが、データベースの負荷を軽減することで動的Webアプリケーションの高速化に使用することを目的としています。

この拡張機能はlibmemcachedライブラリを使用して、memcachedサーバーと通信するためのAPIを提供します。また、セッションハンドラー(memcached)も提供します。

Libmemcachedに関する情報は" http://tangent.org/552/libmemcached.html にあります。

要約すると、どちらも機能的には同じですが、作者が異なり、一方の作者の名前は他の作者よりも適切です。

24

あなたはおそらく PHPクライアント比較 を見たいでしょう。

ショートバージョン:どちらも機能し、ほとんどの場合、どちらでも問題なく機能します。

その他の問題について:はい、telnet 127.0.0.1 11211を実行できるはずです。ごく少数のファイアウォールは、localhostがそれ自体と通信することをブロックします。接続できない場合は、ps auxwww | grep memcachedを実行してmemcachedが実際に実行されていることを確認します。これにより、memcachedの起動に使用されたコマンドライン引数も表示されます。引数の1つは-p 11211または別のポート番号である必要があります。可能なすべての引数の意味については、man memcachedを参照してください。

57
Nate

ネイトのリンクが示唆しているように、どちらも単純な使い方には完璧に機能します。ただし、me​​mcachedはmemcachedから最大のパフォーマンスを引き出すことができるより多くの機能をサポートしています。バイナリプロトコルは、クライアントとサーバーの間で送信する必要があるデータの量を減らします。マルチゲットとマルチセットを使用すると、複数のアイテムを同時に取得/設定できます。 memcacheをもっと活用する必要がある場合は、memcachedがより優れたモジュールです。 libmemcachedの使用は、ライブラリ自体がPHPのみのバージョンよりも最適化されている可能性があることを示唆しています。

Memcachedはmemcacheと比較してより新しいモジュールで、8か月前にリリースされました。古いバージョンのPHPをターゲットにする必要がある場合、実際に使用できるのはmemcacheのみです。

28
David Pashley

古い、バグの多いものはphp-memcacheと呼ばれ、これが最も適切な名前のように思われました。 Diggの人々が独自に開発した新しい、より良いバージョンは、曖昧さをなくすためにphp-memcachedと名付けられました。

名前の正確さだけに基づいてどちらかを選択することをお勧めする人々は、実際には技術的なアドバイスを提供することはできません。

21
tylerl

最近php-memcacheを使用したので、php-memcachedを紹介する必要があります。

ここにいくつかの理由があります。

1)getErrorCode()または同等のメソッドがないため、get()がFALSEを返した場合、memcacheに保存されている値がIS falseであるか、またはある種の問題。

2)一貫したハッシュのためのそのハッシュアルゴリズムは、libmemcachedから構築された多くのクライアントライブラリなどの他の実装とは異なるようです。つまり、複数の言語で同じmemcacheクラスターを使用する場合、PHPクライアントで値を保存すると、他のクライアントがそれを見つけられないという問題が発生する可能性があります。 。

6
user25576

どちらにも今日の問題があります。 PECL/memcacheは古くて信頼できますが、古くなっているいくつかの例外があります。 PECL/memcached 1.xはせいぜいベータ版です。一部の関数は数値キーを処理しないため、永続的な接続を使用すると接続がリークします。一部(すべて?)はGitHubで修正されており、2.xのある時点でリリースされますが、今日はリリースされません。詳細なレビューについては http://brian.moonspot.net/php-memcached-issues を参照してください

3
Brian Moon

私は「エキスパートPHP and MySQL "」という本に取り組んでいます。違いについてはほとんど同じことを書いたのですが、私が推奨したのはPECL/memcachedでした。 -優れた機能を備えたCライブラリ#2-最近更新されました#3-より多くの機能PECL/memcacheへの批判はありません。

2
CaptTofu

Drupal 6とphp-pecl-memcachedでかなり深刻な問題がありました。この場合、応答時間が呼び出しごとに最大5ミリ秒遅れ、特定のサイトで5倍の呼び出しが作成されます。 php-pecl-memcachedに変更する前。php-pecl-memcacheに変更すると、レイテンシと余分な呼び出しの問題がすべて修正されました。

この回答は、Drupal 6およびおそらくDrupal 7。

0
Spechal