22ロック

問題

どのような分野で使用されるロック

答え

  • これを行うには、同時に複数のノードがデータ不整合が生じる可能性がある場合、実行中に一つだけのノードの時間にいずれかの時点で分散ロック・複数のノードは、1つのことを行うために必要とされていることを意味しますが、問題を飼育係。
    (1)クライアントは、ロッカー内のノードの一時的な順序を作成するために、createNodeメソッドを呼び出して、その後、すべての子ノードが以下のロッカー取得する(「ロッカー」)GetChildrenメソッドを呼び出します。具体的なアルゴリズムは以下のとおりです。私たちは、あなたが作成したことを子ノードの最小数を見つけた場合した後(2)クライアントは、すべての子ノードのパスを取得し、それがロックを取得するためにクライアントを考えています。(3)あなたはすべての子ノードのロッカーノードは、彼はまだ、クライアントのニーズは、ノードが、自身のそのレジスタのイベントリスナーよりも小さい見つけるために、ロックを取得していないことを示す、最小ではありません作成していることが判明した場合。それはロックに取得された場合、それがない場合には(4)このノードはリスニングプロセスを削除され、クライアントのウォッチャーは、ノードは自身が最も小さい番号のロッカー子ノードを作成しているかどうかを判断するために、再び、この時間は適切な通知を受け取りますノードとその登録リスナー未満の取得を継続する上記の手順を繰り返します。

  • ロック中のRedis
    、次のようにRedisのは、ロックを分散ビルド:
    jedis.set(キー、requestId、SET_IF_NOT_EXIST、SET_WITH_EXPIRE_TIME、expireTime);
    キーは一意であるので、我々はロックにキーを使用するときに最初に、鍵となります。
    第二は、キーロックがなぜ利用価値は、十分にまだ存在していないで、私たちはrequestIdが説く、値はありますか?その理由は、requestIdによって、我々はロック解除の根拠を持つことができたときにロックを添加し、要求しているかを知ることです。requestIdはUUID.randomUUID()のtoString()メソッドを生成することができます。
    キーがすでに存在する場合、何もしない;第三は、私たちは、キーが存在しないときに設定した場合はNOT EXISTであることが、私たちが操作を設定することを意味し、このパラメータはNXで埋める、nxxxである
    第四はexpxあり、我々は、このキーを与えるプラス5番目のパラメータによって決定された特定の時間を設定期限切れことを意味し、このパラメータはPXである渡します。
    第五は、時間であり、第4引数エコー、キー有効期限の代表。
    全体として、上記セット()メソッドの実装では、2つだけの結果につながる。1.現在、ロックがありません(キーが存在しない)、その値がロック動作及びロック設定期間をロックするプロセス、ですクライアント。2.ラッチされている、何もしません。まず、セット()であることを、あなたは既存のキーがある場合、関数が成功呼び出されないことを保証することができ、NXパラメータに入社し、1つのクライアントのみが相互に排他的満たすためにロックを保持することができます。第2に、我々はロックホルダ、その後の崩壊は、デッドロックが発生しないロックが原因有効期限と自動的にロック解除(つまり、キーが削除される)のものであろうロック解除せずに発生した場合でも、ロックの有効期限を設定します。我々はrequestIdを設定したため最後に、クライアントはチェックが同じクライアントであるかどうかの時点でロックを解除することができます。

  • データベースのロック
    (1)楽観的ロック手段は、データベース(更新)を動作させるための、アイデアは、データを操作することはロックされていない場合は、この操作が競合、にはつながらないということは非常に楽観的である、とアップデートを実行した後、その後、競合があるかどうかを判断します。典型的には、これが達成される:データはテーブル、データテーブルで更新プラスバージョン(版)フィールド、毎回操作、バージョン番号がインクリメントされ、記録の一部を与えるされたとき。そして、あなたはそのレコードのために(更新)操作したい場合は、彼らが同じであれば、現時点では判定値の最初のバージョンは、ちょうどチェックアウト時のバージョンの値に等しい、バージョンフィールドを取得し、歴史の一部をチェックアウトすることですこの期間中に、他のプログラムは、アップデートを実行することができ、それを操作しないように、バージョンフィールドの値がプラス1;値の発見版のバージョンの時点の値が等しくないアップデートは、この期間を持っている場合だけ出そこに操作する他のプログラムがあり、更新操作が実行されません。
    (2)悲観的ロックは、このデータ競合が発生するデータを扱う、それは各動作中にロック缶を得ることによって、同じデータ上で動作する必要がある場合であり、これには、同期でJavaと非常に類似しています悲観的ロックは、より多くの時間がかかります。
    (3)排他ロック(排他ロック、すなわちXロック)と共有ロック(共有ロック、すなわちSロック)。データオブジェクトが排他ロックを追加すると、他のトランザクションは読みませんし、それを変更することができます。プラス共有ロック・データ・オブジェクトは、他のトランザクションで読み取ることができますが、変更することはできません。データベースは、並行トランザクションデータベースを制御するためのロックの2つの基本的な種類を使用しています。MySQLのInnoDBのエンジン文は、データ、更新を修正、削除、プラス排他ロックに関連するデータを自動的に挿入するデフォルトでは、ロックのいずれかのタイプを追加しませんdefault文を選択し、排他的ロックと他のロックが共存することはできません。共有ロック共有ロックの共存を

公開された358元の記事 ウォンの賞賛0 ビュー2739

おすすめ

転載: blog.csdn.net/langli204910/article/details/105268472