MemcachedとAPCのどちらを選択すればよいですか?[閉まっている]


161

私はこの記事を読みました:http : //www.mysqlperformanceblog.com/2006/09/27/apc-or-memcached/ずっと前から..私のアプリケーションが本当に高速になるように、利用可能な最高のキャッシュエンジンを入手したいと考えています。もちろん、私はオーバーキャッシュしたくありませんが、少なくともそこから最高のものを選びたいです。その記事では、Memcachedは遅く、apcは速いと書かれているのに、なぜみんながmemcachedを選んでいるのですか?

http://framework.zend.com/manual/en/zend.cache.backends.html#zend.cache.backends.twolevelsここでは、「Apc、Memcache ...などの高速な(ただし制限された)ものを使用... File、Sqlite ...のような「遅い」もの。Apcを高速に使用し、Memcacheを低速に使用することは良い考えだと思いますか?


14
ところで:を使用しない場合でも、APCを使用する必要がありますapc_store。オペコードキャッシュだけでも、PHPが数倍高速になります。
Kornel

@porneL:どういう意味ですか?スクリプトに何かをキャッシュするコードを追加しなくても、APCはインストール直後にPHPの速度を向上させますか?
Marco Demaio、

5
@マルコデマイオ:確かに。APCは主にPHPオプティマイザー(有効になっている限りデフォルトで最適化されます)であり、それに加えapc_store()て単なる追加ボーナスです。
Kornel 2012

3
2014年に、1台のサーバーでのキャッシュにのみ使用する場合は、APCuを使用してください。
Flion

回答:


268

Memcachedは分散キャッシングシステムですが、APCは非分散で、主にopcodeキャッシュです。

異なるWebサーバー上で実行する必要がある(ロードバランシング)Webアプリケーションがある場合(かつその場合のみ)、分散キャッシュにはmemcacheを使用する必要があります。そうでない場合は、APCとそのキャッシュをそのまま使用します。

常にAPCであるオペコードキャッシュを使用する必要があります(APCもphp6 iircに統合されるので、今すぐ使い始めてください)。

異なる目的で両方を使用できます/使用する必要があります。


5
見事な答え+1。私の質問は、opcodeキャッシュとは何ですか?
Marco Demaio

4
@Karstenサーバー間で状態を維持/共有する必要がない限り、異なるサーバー(クラウド負荷分散環境など)がある場合、APCはまっすぐなメモリキャッシュとしても正常に機能しますが、それぞれのサーバーほど最適ではありませんクラウドインスタンスは独自のキャッシュをウォームする必要があります...
Ray

35
opcodeキャッシュとは、プレーンなPHPコードをマシンコード(「opcode」)にコンパイルし、その後のリクエストのために(元のPHPファイルが変更されたことを検出するまで)コンパイルされた形式で保存するキャッシュです。つまり、PHPはリクエストごとにこのコンパイル手順を実行する必要がないため、時間を節約できます。これは、(他の多くのサイトの中でも)スピーディなサイトを確保する方法の1つにすぎません。
Simon East

2
図とベンチマークの違いのいくつかを説明する興味深いスライドショーがあります。ここに、slideshare.net
Simon East

1
memechachedは、APCの代わりに非分散システムで使用できますか?将来、より多くのマシンを使用する場合は、1つだけ保持することをお勧めします。正しい?または、両方を使用します。1つはオペコード用で、もう1つは拡張可能なキャッシュ用です。
Adib Aroui 2013

43

複数のWebサーバー間で状態を保持する必要がある場合はMemcached(負荷分散されており、キャッシュの内容がすべてのサーバーで同じであることが重要な場合)。

(または各)サーバーで読み取り(および書き込み)するためにクイックメモリにアクセスする必要がある場合は、APC。

APCはスクリプトの実行時間をコンパイルしてスピードアップすることもできます。したがって、たとえば、APCを使用して実行パフォーマンスを向上させ、memcachedをキャッシュストレージに使用することができます。


3
APCはストレージもキャッシュできます。
mr_app 2013

7
2014年の更新:PHP 5.5にはZend Optimizer Plus(opcache専用で、ユーザーキャッシュ用ではありません)がネイティブに含まれ、APCはPHP 5.4以降では開発されないようです。ただし、現在はAPCu pecl.php.net/package/APCuがあり、APCのユーザーキャッシュパーツのみを使用しています
Flion

18

APCの主な利点は、オペコードキャッシュです。PHP 5.5はOpCacheをコアに統合し、APC for PHP 5.4はまだベータ版としてフラグが付けられているため、公式発表ではありませんが、APCの開発は近い将来中止される予定です。

したがって、Memcachedを選択することをお勧めします。


5
私はそれについて考えるために何時間もウェブで過ごしました、そして私は同じ結論を出しました。
Nicolas Zozol 2014

9

私は速度の両方とすべてのサーバーを同期するためにもう1つを使用しています。memcacheを使用する場合は、iptablesでブロックする必要がある開いているポートに注意してください。


6

こんにちはThomaschaafさん、これがツールとして遅くないことを願っていますが、APCには「ユーザーキャッシュ」に関連するいくつかの問題があることに注意してください。簡単に言えば、キャッシュエントリにタイムアウトを設定した場合、またはApacheが内部APCコード内でクラッシュした場合(タイムアウトなど)、問題が発生する可能性があります。

私はここでの問題についてのエントリーがあります。http://nirlevy.blogspot.com/2009/06/apc-futexwait-lockdown-make-your-apache.htmlを、あなたも読んでくださいにhttp://t3.dotgnuを。 info / blog / php / user-cache-timebomb.html(私が考えるAPC開発者の一人から)


22
私はこれに偶然出くわしました、そしてそれが今(現在のところ、2年後に)対処されているように見えることを更新したいと思いました。ここでは例えば、閉じたバグレポートは、です:bugs.debian.org/cgi-bin/bugreport.cgi?bug=572529
シェーンH

1

APCはコードキャッシュであり、memcacheのように機能するため、私はAPCのみを使用しています。2の代わりに1つの構成ファイルのみ。

両方のキャッシュを監視する場所は1つだけです。


1

それはあなたが何をしているのかに依存しますが、VPSで実行している私のdrupal Webサイトにとって、APCは素晴らしいと思います!CentOS 6を実行している場合は、yumアップデートとして入手できるので、インストールは非常に簡単で、デフォルトは妥当なので設定はありません。無知な私見。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.