Redisson 分散ロック ソースコード 8: MultiLock のロックとロック解除

Redisson 分散ロック ソースコード 8: MultiLock のロックとロック解除

[[409055]]

序文

Redis に基づく Redisson 分散インターロック RedissonMultiLock オブジェクトは、複数の RLock オブジェクトをインターロックに関連付けることができ、各 RLock オブジェクト インスタンスは異なる Redisson インスタンスから取得できます。

もちろん公式サイトの紹介です。具体的には何ですか?連動するMultiLockの使い方とソースコードを見てみましょう!

1マルチロックの使用

公式ドキュメントによると、ここでの Redisson クライアントは異なる場合があります。もちろん、一般的な仕事では、クライアントが必要ないとは言いません。

2 ロック

MultiLock ロックについて読む前に、通常のロックに関する関連記事を読んでおく必要があります。

ソースコードエントリ: org.redisson.RedissonMultiLock#lock()

デフォルトのタイムアウトのleaseTimeは設定されていないため、-1になります。

このメソッドは長すぎるので、分割して読んでみましょう。

  1. 基本待機時間 baseWaitTime = ロック数 * 1500、ここでは 4500 ミリ秒です。
  2. leasingTime == -1なのでwaitTime = baseWaitTimeとなり、4500になります。
  3. while (true) は tryLock を呼び出して、成功するまでロックします。

waitTime = 4500、leaseTime = -1、unit = MILLISECONDS のパラメータを指定して tryLock メソッドを呼び出します。

tryLock のロジックを見てみましょう。

leasingTime != -1 が満たされていないため、この部分は直接スキップされます。

waitTime != -1 条件が満たされ、remainTime = 4500、lockWaitTime = 4500 になります。

したがって、failedLocksLimit() メソッドは直接 0 を返します。これは、すべてのロックが正常に取得される必要があることを意味します。

重要なポイントは次のとおりです。

すべてのロックを横断し、1 つずつロックします。

ロックのロジックは再入可能ロックと変わりません。したがって、Lua スクリプトは分析されません。

上記はtryLockがロックされた後の結果です。

ロックが正常に取得された場合、成功したロックは acquireLocks コレクションに格納されます。

ロックに失敗した場合はfailedLocksLimitを判断する必要があります。ここでは 0 なので、正常にロックされたセット acquireLocks 内のすべてのロックが直接解放され、正常にロックされたセットがクリアされてイテレータが復元されます。

各ロックの後に、残りのロック時間 remainTime が更新されます。 remainTime が 0 以下の場合、ロックがタイムアウトしたことを意味し、直接 false が返されます。

これにより、外部の while (true) ロジックが実行され、RedissonMultiLock#tryLock が再度実行されます。

3 ロック解除

ロックのロジックを読んだ後では、ロックの解除が理解しやすくなります。

トラバースしてロックを直接解除するだけです。 lock.unlockAsync() は、呼び出される RedissonBaseLock#unlockAsync() メソッドです。

4 結論

私の理解では、図は次のようになります。

一般的には、key1、key2、key3...keyN を List コレクションに入れて、すべてが成功するまで反復処理してロックします。ロックを解除するときは、ロックを再度通過してロックを解除します。

この記事はWeChatの公開アカウント「Programmer Xiaohang」から転載したもので、以下のQRコードからフォローできます。この記事を転載する場合は、プログラマーXiaohangの公式アカウントまでご連絡ください。

<<:  F5: エッジ コンピューティングはデジタル バンキングのエクスペリエンスをどのように変えるのでしょうか?

>>:  分散システムアーキテクチャの1つであるマスターワーカーアーキテクチャ

推薦する

この写真は私が撮った写真の 1 枚です。この写真が原因で、数十の Web サイトが閉鎖されました。

最近、政府はインターネットの管理を強化しており、簡単な個人ブログを開設するにも、何段階もの承認と申請...

AWS、Azure、GCP: クラウド サービスの詳細な比較

[[435078]]デジタル革命によってもたらされたクラウド コンピューティングの第 3 の波は、私...

Douban.com プロモーション戦略: ウェブマスターに無視される禁煙の場所

私は5年間Doubanのベテランユーザーであり、Doubanブランドのオンラインプロモーションに2年...

A5 トピック: 電子商取引の価格戦争、集団闘争、業界は市場シェアを競うために資金を投入

Webmaster Networkによると、Suning.comが今年4月に価格戦争を開始して以来、...

nixcom-1g メモリ KVM/70g ハードディスク/2t トラフィック/月額 9.99 ドル

Nixcom は、2007 年から商業運営を行っているホスティング プロバイダーです。年末に、ブラン...

カマテラはどうですか?スペイン、マドリードのデータセンタークラウドサーバーレビュー

カマテラはどうですか? Kamatera スペイン クラウド サービス / スペイン VPS サーバ...

Bilibiliの電子商取引の将来はブラインドボックスにかかっているのでしょうか?

ライブストリーミング販売に続き、ビリビリ(略してBステーション)は電子商取引分野で新たな動きを見せた...

VaiCDN: 帯域幅が大きく、防御力が高く、攻撃による遅延が発生せず、申請や実名登録が不要

vaicdnは、アジア太平洋地域のマルチノード負荷、ニアソース配信アーキテクチャのWebページ、アプ...

UGC製品は生死を分けるゲームに直面する可能性がある

これは古い記事なので、今再検討しています。この 2 日間、私の友人グループでは、Xiaohongsh...

Weibo はマーケティングによって消滅しました。マーケティングがなければソーシャル メディアはどうなるのでしょうか?

マーケティングがなければソーシャル メディアはどうなるでしょうか?ある日突然、クリックベイトの原則に...

Dynatrace がクラウド市場を制覇し、ソフトウェア インテリジェンスの新時代を創造

2018年7月18日、第5回Dynatrace Perform Greater Chinaユーザーカ...

Quora のランディング ページ最適化では、少ないほど効果的

有名な質疑応答ソーシャル ネットワーキング サイト Quora に次のような質問があります。 Quo...

中国のビットコインは衝撃的な規制危機に直面しており、破産の波が来ている

国内主要ビットコイン取引プラットフォーム一覧新浪テクノロジー 張南規制当局からの連絡はなく、公式文書...

オラクル、2023年のクラウドコンピューティングに関する5つの予測を発表

クラウド コンピューティングの急速な成長は新しい現象ではありませんが、現在異なるのは、あらゆる業界の...

KOL と KOC は時代遅れかもしれませんが、KOS は流行っているのでしょうか?

現在、電子商取引業界の継続的な発展に伴い、人々はオンラインで商品を「植える」ことを好み、オンラインシ...