ウェブアプリケーションのキャッシュを有効にすることは、軽く行うことではありません。
多分あなたは既にそれをやっているかもしれません...ビジネスニーズやフォークキャスト(例:1000要求/秒を受け入れる必要があります)に基づいて目標を立て、次にあなたのシステムが適切にストレステストをしてから何かを変更してボトルネックを特定し始めます。
私は通常、このような(Facebookから)HXProfとしてプロファイリングツールを使用します。データベースが最善のアプローチではないかもしれませんミラーするために、すべてのデータをキャッシュ
。
キャッシュに割り当てることができるサイズを確認します。あなたのアーキテクチャがあなたのmemcacheに100MBしか割り当てることができないならば、それはキャッシュするものとそれをキャッシュする期間に関するあなたの決定に影響します。
最高のキャッシュは永遠にキャッシュすることです。しかし、私たちは皆、データが変化することを知っている。まず、頻繁に要求されるデータをキャッシュし、フェッチするために最も多くのリソースを必要とします。
あなたは、改善が得られないものを改善するために常に作業していないことを確認してください。
アーキテクチャーを深く理解していないと、誰でもあなたのニーズに最適なキャッシング戦略を推奨することは危険です。
Webサービスのリスル出力をキャッシュしてください。 (@Darrelが話している何)例えばリバースプロキシを使用するか、出力バッファリングを使用して...
あなたはキャッシングについて考える前に、データベースのクエリを最適化します。 PHP Opキャッシュ(APCなど)を使用していることと、標準的な方法であることを確認してください。
あなたがデータをキャッシュして提供されてから古い/古いデータを防ぎたい場合は、トリックは、あなたのデータを識別することである(多分主キー?)とするときに、データが更新または削除された場合、その識別情報のキャッシュを削除または更新します。
<?php
// After inserting into DB, you can also put it in the cache
$memcache->set($userId, $userData);
// After updating or deleting the user, you update or delete the data
$memcache->delete($userId);
多くのサイトで古いデータが表示されます。私がstackoverflowで、私の評判が高まって、私がstackoverflowのチャットに入ったとき、示された評判は私の古い評判です。チャットシステムに古い評判データがあり、私の評判が私がチャットできるほどに増加していたことをまだ知りませんでしたので、20の評判(チャットに必要な評判)が得られたら、さらに5分間チャットできませんでした。一部のデータは失効することがありますが、他のタイプのデータは失効することはありません。データをキャッシュするときに考慮してください。
結論は、あなたのアプローチは、すべて私が上記の話を要因に依存して有効であることができます。実際には、キャッシュするさまざまな種類のデータすべてに対して、それらの組み合わせを使用できます。また、古いデータを表示することが許容される期間もあります。評判(またはすべてのユーザーにとって常に変化するデータ)は短期間だけキャッシュする必要がありますが、頻繁に変更されないため、カテゴリや国のリストは長時間キャッシュされる可能性があります。
私は興味があります、あなたはHTTPキャッシングを使ってみましたか? memcacheがあなたにHttpキャッシングができないことを教えてくれるものがありますか? –