1

PHP スクリプトに対して 1 秒あたり 10K のリクエストがあるとします。

すべてのリクエストは、memcached (またはその他のキャッシュ ストレージ) のキャッシュをチェックしています。キャッシュが見つかった場合 - すべて問題なく、キャッシュ値が返されます。キャッシュが見つからない場合は、低速の SQL クエリを作成してキャッシュを埋めます。これは、最も一般的で単純なキャッシング スキームです。

$result = $this->loadFromCache($key);
if (empty($result)) {
    $result = $this->makeSlowSqlQuery();
    $this->writeToCache($key, $result);
}
//do something with $result;

このスキームは、リクエストが少なくなるまでうまく機能します。リクエストが多すぎるとすぐに、多数のリクエストがキャッシュに何も見つからず、キャッシュを補充しようとする状況に直面します。そのため、それらすべてが遅い SQL クエリの実行を開始し、負荷の影響が大きくなります。解決策は何ですか?

考えられる解決策として、次のシナリオが考えられます。キャッシュが無効であることが判明した最初のリクエストは、キャッシュの補充がすでに開始されていることを示すトリガーを作成し、別のリクエストは新しいキャッシュを待つか、古い (以前の) バージョンを使用する必要があります。

同様の問題をどのように解決しますか?

4

1 に答える 1