序文誰もが分散サービスを使用しているため、分散サービスでの同時データ更新の問題は避けられないと思います。 単一システムの場合、synchronize、ReentrantLock などのさまざまな Java ロックを考えるのは簡単ですが、分散システムではこれをどのように処理するのでしょうか。 もちろん、分散ロックを使用します。 分散ロックが何であるかわからない場合は、Shi Shan 教授の短期集中講座をご覧いただくか、オンラインで関連情報を検索することをお勧めします。 Redis を分散ロックとして使用する場合、最もよく使用されるフレームワークは Redisson です。 もちろん、Redisson はロックとしてだけでなく、他の多くの機能も備えています。公式ドキュメントをご覧になり、ご自身で実践してみてください。 Redisson関連のメモを記録し始めましょう!間違いがありましたら訂正してください。 1. 環境設定
バージョンによって異なる場合もありますが、中核となる考え方はそれほど変わりません。大きな変更がある場合はメッセージを残してください。
単純な Maven プロジェクトでは Main メソッドのみが必要です。 2. 再入可能ロックlock.lock() ブレークポイントで、ソース コード エントリとして。 デフォルトではロックされており、パラメータは渡されません。しかし、ここではleaseTime = -1が設定されています。リースタイムの意味はロック時間です。 残りはただ前進するだけです。 tryAcquire メソッドを呼び出す前に、現在のスレッドの ID である long 型の正の数値である追加のパラメータ threadId が追加されます。 非同期ロックtryAcquireAsync 非同期ロック メソッドに直接移動します。 取得非同期処理 先ほども述べたように、leaseTime は -1 なので、ここでは次の方法に進みます。 この時点で、いくつかのパラメータが明確になっています。
Redis eval コマンドのドキュメントは、https://redis.io/commands/eval で読むことができます。 ロックロジック実際のロックは、まさにこのような Lua スクリプトです。 まず、lua スクリプトのパラメータ情報を説明します。
Lua スクリプトを使用しているため、この Lua スクリプトのアトミック性が保証されます。 最初のロック分析:
ロック後の Redis のデータ形式は次のとおりです。 Redis のハッシュ データ構造の詳細については、https://redis.io/topics/data-types#hashes をご覧ください。 抽象的に言えば、anyLock は、その下にぶら下がっている KV 構造化データとして理解できます。
スクリプトを実行する以降の内容は、Lua スクリプトの実行をリクエストする内容です。注意する必要があるのは、ハッシュ スロット ルーティングがあることだけです。 このコードは、NodeSource を取得するために CommandAsyncService#evalWriteAsync メソッドで呼び出されます。 もちろん、この NodeSource には 1 つのスロット (ハッシュ スロット値) のみが格納されます。 このスロット値は、ロックされたキーの CRC16 アルゴリズムを使用して計算されます。
スロットを計算することの用途は何ですか? 追跡を続けてください! BaseRedisBatchExecutor#addBatchCommandData はソースからソルトを取得し、次に MasterSlaveEntry を取得します。 これは、この Redis キーに対応するノードを取得することであると大まかに理解できます。 再入性再入可能ロックであるため、このブロックは再入可能性をサポートします。再入可能性がどのように保証されるかを見てみましょう。
ロックミューテックス上記では 2 つの状況が確認されています。
残りのケースは、キーは存在するがフィールドが存在しないときです。 キー フィールドには UUID:ThreadId が含まれていることに注意してください。これは、ロックされているスレッドが現在のスレッドではないことを意味します。このとき、現在のロックの残り時間がそのまま返されます。 3. まとめこの記事では、主に Redisson 再入可能ロックのロック、ロック再入、およびロック相互排他ロジックについて説明します。 主な焦点は lua スクリプトにあります。 Redis のハッシュ データ構造も理解する必要があります。 また、ロック時間が指定されていない場合は、デフォルトは 30 秒になることに注意してください。 最後に、この記事のロックロジックを図で紹介します。 |
<<: Longxingyoufengは、Beanオブジェクトの初期化と破棄のメソッドを実装するために仮想マシンにフックを登録します。
>>: Tekton を使用した自動化パイプラインのリファクタリング
Kubernetes Pod とは何ですか? Kubernetes Pod は、Kubernetes...
IT の観点から見ると、パンデミックの期間中、リモートワーク、仮想コラボレーション、オンライン会議、...
科学技術の発展により、伝統的な教育モデルは覆されました。学習の方法や場所、学習の構造や論理など、大き...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス2018年の春節は少し異...
「Da Pu は有名になりたくない。」この言葉は、注目を集めるためにお金を燃やすことに頼っている現在...
OpenKruise (https://openkruise.io) は、デプロイメント、リリース、...
ワーナーを含むいくつかの大手国際レコード会社が、今年末か来年初めにKugou、Kuwo、Baidu、...
クラウドコンピューティングの分野では、近年、Amazon、Microsoft、Google などのテ...
クラウド コンピューティング サービスへの支出を管理することは、これまで以上に重要になっています。ク...
SEO ブラックハットといえば、最近登場した SEO 不正ツール、Baidu Clicker につい...
双十一から20日近く経ちました。350億の取引高は、天猫にさらなるハイライトをもたらしたわけではなく...
漢末期、黄巾の乱が勃発し、世は混乱に陥っていた。曹操が朝廷を掌握し、孫権は軍を率いて東呉に向かい、漢...
さらに読む: Qvod のユーザーへの手紙: ビデオオンデマンドとダウンロードを停止するため、Qvo...
最近、Baidu は新しいウェブサイトのインデックス作成に苦労しています。新しいサイトがまったく含ま...
現在、オンライン情報の発達により、各ウェブサイトでは毎日数十から数百の情報が更新されています。いくつ...