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つであるマスターワーカーアーキテクチャ

推薦する

モバイルアプリのSEOに関する実践的な経験を共有する

誰もが自分のアプリに自信を持っていますが、そう感じていない人もいるかもしれません。しかし、アプリケー...

タレントのウェブサイトがブロックされた後、私たちは何をすべきでしょうか?

最近、A5で地元タレントサイトの運営に関する記事をたくさん見ましたが、これは地元タレントサイトが今い...

ルートレベルテクノロジーがUrpadを買収

2017 年 5 月 10 日、大手仮想ホスティング会社およびソリューション プロバイダーである R...

香港直接 VPS: juhost、40% 割引、月額 2.99 ドル、1G メモリ/1 コア/20g SSD/1T トラフィック/100M 帯域幅

香港の新しい VPS ブランドである Juhost は、主に香港で中国本土に直接接続された 100M...

Google Urchin の設定: 電子商取引の取引を追跡する方法

Google Analtics と同様に、Google Urchin は e コマース機能を追跡し、...

ウェブサイトの可能性を分析し、ユーザーとの関係を構築する

急速な経済発展の時代において、人々は物事に可能性があるかどうか、またそれを始める、あるいは続ける必要...

プラットフォームレベルの企業が地域に浸透する。地域サイトがO2Oに参入するには機敏さが求められる。

O2O市場は現在、起業家と投資家がしのぎを削る重要な戦場の一つです。ますます多くのプラットフォームレ...

WeChat マーケティングと検索エンジン マーケティングのどちらが優れているのでしょうか?

まず、2年前の検索エンジンマーケティングの人気を振り返ってみましょう。2年前、検索エンジンマーケティ...

ブランドはマーケティングのボトルネックをどうやって打破できるのでしょうか?

ある起業家が自身のブランドの海外旗艦店をオープンしたが、小紅書や抖音などの主流プラットフォームではラ...

Baiduの絶え間ない変化に直面して、SEOにはより冷静な姿勢が求められる

昨日、たまたまネットで記事を見ました。どのページだったかは覚えていませんが、長年 SEO に携わって...

Panguは本日合併を発表した。周希勝氏がCEOに就任する。鄧亜平氏の所在は不明。

網易科技ニュース、8月1日、網易科技は独占的に、Pangu SearchとJikesouが本日10時...

SEO クライアントからの苦情を減らすにはどうすればよいでしょうか?

SEO の仕事は血と涙を伴う厳しい仕事だという人もいます。王世凡はこの意見に大いに賛同しており、中国...

5 つのステップで Spring Boot サービスを Kubernetes に移行する

多くの Java 開発者は Spring Framework を使用して Web サービスを迅速に作...

JD Cloud は着実な進歩で大きな成功を収め続けています!

[51CTO.com からのオリジナル記事] 政府クラウドは、クラウド コンピューティング テクノロ...

今こそクラウドコンピューティングを学ぶのに適した時期でしょうか?

クラウド コンピューティングは現在、急速な発展段階にあり、今こそクラウド コンピューティングのスキル...