K->V キャッシュ障害後の高い同時アクセスによって引き起こされるデータベース負荷の急激な増加の問題を簡単に処理する_PHP チュートリアル

WBOY
リリース: 2016-07-20 11:13:51
オリジナル
1009 人が閲覧しました

日常のプログラミングでは、一定量の同時実行性または大量のデータを伴う一部のデータベース操作では、フロントエンドにキャッシュ層を追加し、有効期限を設定するのが通常は mongoDB または memcached です。次のように:

同時実行量がそれほど多くない場合、またはデータ操作効率が非常に高い場合、このモードは基本的に問題ありません。
しかし、おそらく、(キャッシュ障害が発生し、同時実行性が高く、データベース操作時間が長い場合) を見たことがあるでしょうか?
1. キャッシュの無効化
2. 最初のプロセスはデータベースに行き、新しいデータを取得します。SQL + プログラムロジックが含まれる場合、5S かかります
3. この 5S の中で、2 番目、3 番目... . N 全員が期限切れのキャッシュを取得したばかりなので、全員がデータベースに接続しました...
4. 結果は明らかです、データベースはテーブルをロックします -> データベースは大量のプロセスを蓄積します -> データベースがハングするまで上!

それでは、この問題をどうやって解決すればいいのでしょうか?実際、最も簡単な解決策は次のとおりです:
ファイル ロックに似たマークを追加して、プログラムが現時点でキャッシュを更新しているかどうかを判断します。
「はい」の場合は、古いキャッシュに直接戻ります (マークが削除されないプログラムエラーによりキャッシュが更新されない問題を回避するために、マークには有効期限が設定されています)
そうでない場合は、設定しますマークを付けてからデータの取得とキャッシュを行い、最後にマークを削除します。

PS. 初めてキャッシュが生成された場合、一部のユーザーはデータを表示できない可能性がありますが、この可能性は非常に小さいため、手動生成などの他の方法で解決できます。


プロセスは次のとおりです:

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/440329.html技術記事日常のプログラミングでは、ある程度の同時実行性や大量のデータを伴うデータベース操作では、フロントエンドにキャッシュ層を追加し、有効期限を設定するのは通常 mongoDB か私です...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート