どのPHP(opcode)キャッシュを使用すべきか、そしてその理由は?


44

APC、XCache、Memcache、eAcceleratorなどのPHP(opcode)キャッシュについて耳にします。

しかし、私はこれを選択する方法を理解できませんでした。キャッシングシステムが提供することになっているパフォーマンス上の利点は別として、他の要因が懸念事項になります。

XキャッシュシステムがYよりも優れていると言う理由が好きですか?相対的なパフォーマンスの向上についてはあまり心配していません。2つのシステム間の小さな違いはそれほど重要ではありません。

私の質問に対する一般的な答えが不可能な場合、ここにいくつかのポインタがあります。Mediatemple(ルートアクセス)で専用のVPSを使用します。RAMは512 MB(物理)+ 400 MB(スワップ)です。WordPressとそのいとこであるWordPress-MUとBuddyPressが心配です。コード/サイトの90%はWordPressファミリーに分類されます。

助けてくれてありがとう。

回答:


33

リストする製品にはさまざまな目的があります。

OPCodeキャッシュ

このウィキペディアのリストに見られるように、多くのPHPアクセラレータ(OPCache)があります。オープンソース製品で一般的であるように、それらはすべてかなり似ています。XCacheはlighttp PHPアクセラレータであり、そのHTTPdを実行しているときのデフォルトの選択肢です。Apacheでも同様に機能しますが、APCは社会的に言えば「他の人とうまく機能する」ようであり、PHPの一部として公式にサポートされており、公式のPHPディストリビューションと一緒にリリースされます。

開発が遅くなり、PHPのリリースに遅れをとっており、APCが公式の祝福されたステータスで同様のパフォーマンスを提供しているため、使用していないeAcceleratorを放棄しました。

これらの製品は通常ドロップインです。コードの変更なしですぐにパフォーマンスが向上します。大きなコードベース(Drupal、Wordpress)を使用すると、応答時間とメモリ使用量を削減しながらパフォーマンスを最大3倍向上させることができます。

データキャッシング

Memcacheはわずかに異なる製品です。複数のサーバーに拡張できる軽量のキーバリューシステムと考えることができます。Memcacheをサポートするには、ソフトウェアを強化する必要があり、特定の問題を他の問題よりもよく解決します。Webサイトにリアルタイムの株価のリストがある場合、Memcacheを使用して、Webサイト全体に表示される現在の値の常駐リストを保持できます。短期間の再利用のためにセッションデータを保存するために使用できます。フルページキャッシュなど、MySQLの代替として使用することはありません。

Wordpressのパフォーマンスを大幅に改善できるWP-Super-CacheなどのWordpressアドオンもあります(実際、WP-Super-Cacheは多くの場合、静的なHTMLベースのサイトに匹敵します)

要約すると、「設定して忘れて、十分にサポートされている製品」が必要な場合は、APCを強くお勧めします。


この答えはMetaで議論されています:meta.stackexchange.com/questions/15474/…–
ブラッドギルバート

[4]: http://」を入力して修正します。
ブラッドギルバート

たくさんのSirStanに感謝します!あなたの答えは私の問題を解決しただけでなく、キャッシングの世界についてより多くの洞察を得ることにも役立ちました。もう1つお願いします。私はすでにwp-supercacheを使用しています。APCと組み合わせることをお勧めしますか?APCはパフォーマンスをさらに大幅に改善しますか?APCとWp-SuperCacheは一緒に動作しますか?両方必要ですか?または、APCはWp-SuperCacheを冗長にしますか?
rahul286 09

注:APCはデータキャッシングとオペコードキャッシングの両方を行います。
lo_fye 09

2
この答えは現在非常に古くなっています。V. 5.5以降、Zendのオプティマイザーとオペコードキャッシュ(現在はopcache)に置き換えられたPHPの将来のバージョンでは、APCが更新される可能性は低いです。ただし、パフォーマンスに大きな違いはありません(symcbean.blogspot.co.uk/2013/09/…)。さらに、opcacheのデータサポートの欠如とメモリの再利用の欠如により、アップグレードが逆効果になる場合があります。
symcbean


6

APCはPHP6に組み込まれるため、論理的な選択です。私はそれを使用し、パフォーマンスの向上は素晴らしいです。オペコード以外の何か(つまり、dbクエリ結果)をキャッシュする必要がある場合、そのためにAPCも使用できますが、複数のサーバー間でAPCキャッシュを共有することはできません。1台のサーバーでのみキャッシュする必要がある場合は、APCが最適です。複数のサーバーにスケールアウトする必要があり、それらの間でキャッシュを共有したい場合は、memcached最適です。

ただし、私がやることの1つは、実行する(オペコードではない)キャッシング用のラッパークラスを作成することです。そうすれば、コードを変更せずにキャッシュエンジンを交換できます。


ワオ。もしAPCの公式ステータスを知っていたら、長期的にそれに戻っていただろう... :-)また、オペコード/非オペコードキャッシュの違いについてもあまり知りませんでした。個人的な選択として、ラッパークラスを作成したり、アプリのソースを変更してオーバーヘッドをキャッシング環境に適応させたりするオーバーヘッドを避けたいと思います。
rahul286 09

6
PHP 5.5は、「公式」オペコードキャッシュとしてのZend Opcacheを統合するので、私は彼らがPHP 6のためAPCに切り替わりますそうだと思う、という注意
マッテオTassinari

1
これを修正するには:PHP 5.5はZend Opcacheに同梱されています。PHP 6はありません。代わりにPHP 7があります。APCはほとんど(?)時代遅れと見なされます。
Jisse Reitsma

6

状況が少し変わったことに注意してください。APCはPHP 6コアに含まれないようです。

APCの開発は遅く、PHP 5.5との互換性は決してないようです。そのため、PHPの人々はZend OPCacheオペコードキャッシュ拡張機能をPHP CORE拡張機能として設定するようです。詳細はhttp://wiki.php.net/rfc/optimizerplusをご覧ください

重要な注意:Zend OPCacheにはAPCのようなユーザーデータキャッシュがないため、ユーザーデータキャッシュが必要な場合は、Memcacheと併用できます。


1
また、キャッシュがいっぱいになるとキャッシュ全体が無効になります(無効なエントリは削除されません)。したがって、メモリよりもコードが多い場合や頻繁にデプロイする場合は、パフォーマンスの急上昇が見られます。
symcbean

3

PHPバージョン5.50以上を実行している場合、OpCacheが最適です(PHP / PECLネイティブライブラリ)。バイナリからインストールする場合は、事前にコンパイルされている必要があります。

http://php.net/manual/en/book.opcache.php

5.5より前のバージョンのPHPを実行している場合、APC(PHP / PECLネイティブOpCodeキャッシュ)が最も簡単な選択肢になりますが、メンテナンスされておらず死んでいると見なされます。

http://php.net/manual/en/book.apc.php

PHPのネイティブOpCache機能を使用すると、サードパーティのライブラリを維持する手間が省けます。


1
PHP <5.5を実行している場合、最初にすべきことはそれを更新することです。
マイケルハンプトン

@ michael-hampton ::確かに!しかし、まれに、OSをアップグレードせずにPHPを更新できない場合があり、これは新しいハードウェア要件を意味する場合もあります。例-IBM iシリーズサーバー、バージョン6somethingsを実行している会社で働いています。PHPバージョンは5.4.3です。IBMはPHPバージョンを移植するためにZendに依存しているため、PHP 5.6では新しいバージョンのIBM-i OS-7.1以降(およびその後に新しいバージョンのZend PHPサーバー)が必要であり、これには新しいPower-8サーバーなどが必要です...まあ。
再帰

0

Memcacheは、オペコードではなく、キー/値のペアをキャッシュします。オペコードキャッシュの1つと組み合わせて使用​​できます。


SirStanの回答(下記)から、memcacheでPHPアプリを変更する必要があるようです。実際、私はWordpressを使用していますが、そのコアコードを変更することはお勧めできません。
rahul286 09
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.