高並行性とデータベースキャッシュの下に二重の矛盾の解決策を書きます

1、ほとんどの一次キャッシュの不整合などのソリューション
問題:データベースを変更して、キャッシュを削除し、あなたはキャッシュが失敗した削除した場合、データベースは新しいデータにつながるために、キャッシュが古いデータ、データの矛盾です。
解決策:
  キャッシュを削除し、キャッシュを削除した場合、その後、データベースを変更するには、データベースは、データベースが古いデータであり、失敗した変更成功し、キャッシュが空であるキャッシュが読み込まれていない場合は、データベースを読んでいるので、そのデータは、矛盾するものではありません古いデータは、その後、キャッシュに更新します。

  

2、データキャッシュ矛盾するの同時分析の下で
の問題:
  最初の要求データが変更され、最初に修正する時間がなかった。この時点でデータベースを変更するために行く、キャッシュを削除し、そして、
  2番目の要求がキャッシュを読むようになった、キャッシュが空に発見されました、およびデータベースを照会するために、バッファに、変更前の古いデータを発見し、
  (この場合、要求はデータベース操作の第1の変形例を完了した)キャッシュ内のデータを読み出すための第三の要求を。
  以上、データベースのキャッシュデータとは同じではありません。
分析:
  のみ、同じ時間での同時読み取りおよび書き込みデータのために、それはこの問題に直面する可能性があります。実際、あなたはいくつかの例そして、同時実行の言葉は、特に10,000日あたりの低同時読み取りアクセスでは、非常に低いと言えば、今説明した矛盾のシーンのようなものが表示されます。しかし、その日の場合万人の流れは、同時数万があればデータを更新するための要求があるように毎秒、毎秒読み取り、それは+データベースキャッシュ矛盾の上にあってもよいです。
ソリューション
  データベースキャッシュの更新が読み取り操作をシリアル化し、ワーカースレッドに対応するキューは、対応するシリアル動作を得るために、各ワーカースレッドは、その後、1が実行されます。
  1.まず、我々は、キュー内のアイテムのセットを維持します。
  2.データベース、要求のその後端を更新するために、一意の識別データJVM経路キューへの要求に基づいて、データを更新します。
  前記第1のデータがキャッシュ内に見つからない場合、次の固有の識別経路に従い、その後、キャッシュをチェックし、同じJVM内部キューを送信するリードデータは、キャッシュ、リクエストの終端を更新するためにデータベースを再読み込み。

   

  ポイントを最適化する必要があり、そのようなキューとして、意味のない文字列は、一緒にいる連続更新キャッシュ要求が複数あるので、重複したクエリのデータベース操作に最適化されなければならないキャッシュを更新する:それはキューに発見された場合は、キャッシュの更新を持っています要求は、一方が(ここで一例であり、実際の値は、サービスの応答時間と機械の処理能力に基づいて算出してもよい)200msの約閉塞の裏面に直接、操作中に読み出し要求を更新要求を再捕捉しないであろう、結果を得るためにキャッシュを更新せずにデータベースをチェックする値がない場合は、再度、キャッシュをキャッシュに照会し、ページに直接戻りました。

おすすめ

転載: www.cnblogs.com/wlwl/p/11601632.html