2012-02-16 5 views
0

PHPアプリケーションでパフォーマンスを向上させるためのキャッシュ機構を使用したいと思っています。それを見て、私はキャッシングに関するより一般的な問題を見つけました...レコードキャッシュを作成する最良の方法(この例ではMemcache)

私が見ている問題は、例のように、キャッシュされた結果のハッシュキーとして単純にSQL文を使用すると、重複レコードの可能性があります。これは、SQL Aがレコード1,2,4をフェッチし、SQL Bがレコード2,3,4をフェッチする場合に発生します。この場合、レコード2は両方の結果セットに含まれます。単純にレコードを取得してから同じレコードにリンクすれば、パフォーマンスはあまり上がらず、アプリケーションが遅くなる可能性があります。

誰かがこれを見つけたに違いありません - だから、誰かがキャッシュを管理するためのより良い方法について何を示唆しているのだろうかと思います。それとも、単純にキャッシュしないで、常にデータベースに頼っているのでしょうか?

ありがとうございました。

答えて

2

なぜこれでも心配ですか?ポイントは、クエリがキャッシュされていることです。 2つの異なるクエリの結果が部分的に重複している場合は、そうです。これらの結果がサイズが数メガバイトにもならず、したがって多くのスペースを取らなければ、問題ではありません。重要なことは、結果が既にキャッシュされているため、同じクエリを再度実行する必要がないということです。

+0

これは意味がありますが、新しい問題を引き起こします。 SQL Aからレコード2を変更すると、SQL Bのキャッシュを無効にする必要がありますか?そうでない場合、SQL Bの値は最新ではありません。または、レコードを更新するとエスカレートしますか?キャッシュされた結果をすべて破棄しますか? –

+0

それはあなたのキャッシング戦略の詳細になり、より効率的です。更新頻度が低い場合は、更新時にキャッシュ全体を単純にクリーンアップするのが理にかなっています。一般的なサイトで頻繁に更新を行う場合は、x分ごとにキャッシュ全体を消去すると意味がありますので、サイト全体がx分間静的に見えます。その他、さまざまな方法が考えられます。 – deceze

関連する問題