2

私は php/mysql 駆動の Web サイトを実行しており、多くのアクセスがあり、データベースの負荷を軽減するために結果セットを共有メモリにキャッシュする可能性を検討しています。
ただし、現在 MySQL のクエリ キャッシュが有効になっており、クエリ キャッシュを無効にすると CPU の使用率がすぐに 100% に跳ね上がるため、かなりうまく機能しているようです。
そのような状況を考えると、結果セット (または生成された HTML コードでさえも) を PHP の共有メモリにローカルにキャッシュすることで、パフォーマンスが大幅に向上するかどうかはわかりません。

誰かがこの問題について何か経験がありますか?

PS: memcached のような強力なソリューションを提案することは避けてください。現在、実装、展開、および保守に時間がかかりすぎないシンプルなソリューションを探しています。

編集:
memcached に関する私のコメントは、実際のポイントから逸脱した回答を参照しています。つまり、アプリケーション層で DB クエリをキャッシュすると、これらのクエリの結果が既に DB レベルでキャッシュされていることを考えると、パフォーマンスに顕著な影響が生じるかどうかです。

4

2 に答える 2

3

memcached について聞きたくないのはわかっていますが、memcached は、あなたがやろうとしていることに対する最良の解決策の 1 つですサイトの使用状況によっては、パフォーマンスが大幅に向上する可能性があります。データベース セッション ハンドラーではなく memcached のセッション ハンドラーを使用するだけで、負荷を半分に減らし、リクエストの処理時間を 30% 以上削減することができました。

現実的には、memcached は単純なソリューションです。すでに PHP と統合されており (拡張機能がロードされている場合)、実質的に構成は必要ありません (1 つまたは 2 つのシェル コマンドで実行される、Linux ボックスのサービスとして memcached を追加するだけでした)。

セッション データ (およびキャッシュに適したもの) を memcache に保存することをお勧めします。動的なページ (スタック オーバーフロー ホームページなど) の場合、フラッディングを防ぐために出力を数秒間キャッシュすることをお勧めします。

于 2010-05-25T18:15:12.073 に答える
0

適切なシングル ボックス ソリューションはファイル ベースのキャッシュですが、手動で一掃する必要があります。それ以外に、非常に高速でメモリ内にある APC を使用できます (それでも、自分で期限切れにする必要があります)。

ただし、1 つの Web サーバーを超えてスケ​​ーリングするとすぐに、memcached である共有キャッシュが必要になります。なぜこれを展開しないことに固執するのですか?難しいことではなく、今後の時間を節約するだけです。今すぐ memcache の使用を開始して終了することもできますし、上記の方法のいずれかを今は使用して、後で memcache に切り替えることもできます。その結果、さらに多くの作業が必要になります。さらに、キャッシュの有効期限機能を取得するために cronjob やその他の醜いハックを実行する必要はありません。

mysql クエリ キャッシュは便利ですが、問題がないわけではありません。大きな問題の 1 つは、ソース データが変更されるたびに自動的に期限切れになることです。これは、おそらく望ましくありません。

于 2010-05-25T18:29:50.783 に答える