並行環境、データベースやキャッシュの第1の動作の第1の動作?

序文

時刻書き込み動作、データベースまたはキャッシュそれの第1の動作の第1の動作がある場合、分散システムでは、キャッシュとデータベースが存在しますか?まず、問題があるかもしれないものについて考え、次に見下ろします。今、私はいくつかのオプションが精緻分けます。

キャッシュメンテナンスプログラム

書き込み(スレッドA)を読み取る(スレッドB)操作、仮定キャッシュの第1の動作は、データベースの操作を、フローチャートが示されている以下:

1)スレッドAが書き込み動作を開始し、最初のステップ・デル・キャッシュ

2)糸の第二のステップは、DBに新しいデータを書き込みます。

3)スレッドBは、読み出し動作、キャッシュミスを開始し、

4)スレッドBは、DBから最新のデータを取得します

5)B同時に設定キャッシュ要求

このビューに、何も問題私たちは、第2のフローチャートを見て、以下:

1)スレッドAが書き込み動作を開始し、最初のステップ・デル・キャッシュ

2)このとき、スレッドBは、読み出し動作、キャッシュミスを開始します

3)スレッドBは、古いデータを読み出し、DBを読み続けて

4)古いデータキャッシュにして、

5)スレッドは、最新のデータを書き込み、

OK、江Ziが、問題は、古いデータは、キャッシュに存在し、それぞれのデータを読み込む古い友人であり、データキャッシュとデータベースのデータの矛盾

キャッシュのメンテナンススキームII

書き込み操作、ダブルキャッシュの最初の操作、データベースの操作を

1)スレッドAは、書き込み動作、キャッシュを設定するための最初のステップを開始します

2)糸の第二のステップは、DBに新しいデータを書き込みます。

3)スレッドBは、書き込み動作、セット・キャッシュを開始します

4)工程BスレッドがDBに新しいデータを書き込みます。

このビューには、また、問題を欠いています。、しかし、時には、次のように我々は、第2のフローチャートを見て、裏目に出ることができます。

1)スレッドAは、書き込み動作、キャッシュを設定するための最初のステップを開始します

2)スレッドBが書き込み動作を開始し、まずステップsetcache

3)データベースDB Bにスレッドします

4)スレッドがデータベースDBに書き込みます

実行後、データはB操作後キャッシュに格納され、データデータベース操作、一貫性のないデータ・キャッシュとデータベース

キャッシュのメンテナンスプログラム3

(スレッドB)動作、読み出し書き込み(スレッドA) データベースの第1の動作、およびキャッシュを操作します

1)スレッドAが書き込み動作を開始し、最初のステップは、DBを書き込みます

2)第二工程デル・キャッシュ・スレッド

3)スレッドBは、読み出し動作、キャッシュミスを開始します

4)スレッドBは、DBから最新のデータを取得します

5)スレッドBを同時に設定したキャッシュ

このプログラムは、明白な並行性の問題ではありませんが、それは可能である。ステップ2は、キャッシュを削除することができなかった確率は比較的小さいものの、オプション1とオプション2よりも優れている、ルーチンワークはオプションIIIの使用です。

要約比較では、我々は一般的にプログラム3を使用しますが、欠点にそれを解決するための3つの完璧な全体をプログラムする方法はありませんか?

メンテナンスキャッシュオプションIV

これは、プログラム3改善プログラムで、我々は、フロー・チャートを見て、データベースとキャッシュの操作を操作する最初のものです:

データベースによってビンログがするキー解消非同期ことができますMySQLへ例えば、アリの運河のbinlogのログ収集を使用するには、MQキューに送信されます内側、その後に対処するためのACKメカニズムによって確認一貫性を確保するために、データ・キャッシュをキャッシュを削除し、このニュースの更新。

しかし、そこにある、それはマスター・スレーブのデータベースである場合、問題は、

キャッシュのメンテナンスプログラム5

DBからの主な問題:マスターDBの場合の同期遅延時間がある一方で、同期要求が来た前に、スタンバイ・データベースへのキャッシュデータを削除した後、ので、バックアップデータベースからダーティデータを読み込みます、どのようにそれを解決するには?ソリューションフローチャートは次のとおりです。

キャッシュのメンテナンスの概要

キャッシュとデータベースが存在する場合、時間の書き込み動作がある場合、分散システムにおいて、要約するとデータベースの第1の動作、およびキャッシュを操作します次のように:

データがあるかどうか(1)キャッシュを読みます

(2)キャッシュ内の関連するデータ値場合、返さ

キャッシュにデータがない場合(3)、キャッシュキー - >値は、リターンに、データベースから関連するデータを読み出します

(4)更新データの場合、データが最初に更新、およびキャッシュを削除しています

(5)第四の工程は、キャッシュを削除の成功を確実にするために、使用非同期バイナリログを削除します

(6)マスタースレーブデータベース場合、ライブラリーから採取binglog

ただ、それがある場合には(7)各ビンログからのマルチマスタがライブラリーから収集し、その後、最終消費者はビンログデータを終わら受けなければならないキャッシュを削除

個人公開番号

懸念へようこそ、私たちはカザフスタンを議論し、一緒に勉強します。

おすすめ

転載: juejin.im/post/5d4a3196f265da03ab423727