Redisson 分散ロック ソースコード フェアロック リリース

Redisson 分散ロック ソースコード フェアロック リリース

[[408803]]

序文

ウォッチドッグ メカニズムは、RedissonBaseLock#scheduleExpirationRenewal メソッドにあります。このフェアロックとアンフェアロックの間には違いはありません。

前に学んだように、公平なロックが失敗すると、現在のロックは待機キューに配置され、Java コードのループを通じてロックの取得が試行されます。

1. ロック解除

アクティブリリース

ソースコード: RedissonFairLock#unlockInnerAsync

  • KEYS[1]: ロック名、anyLock;
  • KEYS[2]: ロック待機キュー、redisson_lock_queue:{anyLock};
  • KEYS[3]: 待機キュー内のスレッドロック時間のセット、redisson_lock_timeout:{anyLock}。ロックタイムスタンプに従ってセットに格納されます。
  • キー[4]:redisson_lock__channel:{anyLock};
  • ARGV[1]:LockPubSub.UNLOCK_MESSAGE;
  • ARGV[2]: ロックタイムアウト30000;
  • ARGV[3]: UUID:スレッドIDの組み合わせ58f6c4a2-9908-4957-b229-283a45359c4b:47;
  • ARGV[4]: currentTime 現在のタイムスタンプ。

このロジックのハイライト部分はマークされており、重要なポイントはロックを解除することです。

  1. キューにロックされ、タイムアウトの場合はキューから直接削除されます。
  2. ロックにより再入回数が減ります。削減後、再入回数が 0 より大きい場合は、タイムアウトがリセットされます。 0 より大きくない場合は、ロックは直接削除されます。

このようにして、他のスレッドは待機キューからロックを取得し始めます。

タイムアウト削除

ロックのロックと解放を行う Lua スクリプトでは、最初の段落は常に while true do xxx であり、キュー内のタイムアウトしたロックを削除するために使用されます。

ロックを保持しているスレッドの解放は、不正なロックと変わりません。ロックがタイムアウトするか、サービスが停止すると、ロックは自動的に解除されます。 (これは anyLock を指します)。

2. まとめ

フェアロックの解放もアクティブ解放とタイムアウト解放に分けられます。

アクティブリリース、つまりリリースロックを自分で呼び出します。

タイムアウト削除には 2 種類あります。 1 つは、ロックを保持しているスレッドのタイムアウト削除です。このロックにもタイムアウト期間 + ウォッチドッグの更新が含まれているため、これは不公平なロックと変わりません。もう 1 つは、キュー内でタイムアウト削除を待機することです。毎回ロックを取得する前に、最初の待機スレッドのタイムスタンプがタイムアウトしたかどうかを判断し、ロックを解除する必要があります。

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

<<:  クラウド ネイティブ 2.0: 今検討すべき 3 つの DevOps 戦略

>>:  OpenHarmony 分散ソフトバスプロセス分析 v1.0丨2。ソフトバスを開いて接続を確立する

推薦する

インターネットモデルは改善し続けている:ライト・ウェイク

インターネットは常に進化しており、もちろんインターネット モデルも常に進化しています。ここで、Cra...

オフライン活動を行う地域ポータルサイトの経験

オフライン活動の実施は、ウェブサイトの人気と投稿量に大きな影響を与えます。これは、多くのローカル ポ...

コンバージョン率の向上に役立つウェブサイトはどのようなものでしょうか?

ウェブサイトの開設は、企業の認知度を高めるためだけではなく、企業の利益を高めるためにも重要です。こう...

中国最大のリンクプラットフォーム「アリウェイ」が数日間連続DDos攻撃を受けた

中国最大のリンク交換プラットフォーム「AliVV」の公式サイトが数日連続で開けない状態が続いており、...

独立したSEOとしての経験を共有する

過去2か月間、フルタイムでウェブサイトを運営することで多くのことを得ました。最初は、ファウンテンウェ...

ソフトコピーを書くための4つの簡単なステップ

検索エンジンの成熟度が高まるにつれて、ウェブサイトの外部リンクの品質に対する要求も高まっています。従...

Kubernetes の可観測性を高める 3 つの優れたツール

適切に管理および実装された可観測性システムは、複雑なシステムのデバッグと修正に使用できるきめ細かい洞...

推奨されるクラシック OpenVZ VPS: serverhub/infinity

Serverhubの歴史は2002年に遡ります。私は以前Infinitieというブランドを使ったこと...

キーワードツールからの百度インデックスユーザーの注目

百度指数(以下、指数)を開発した当初の意図は、単に一般大衆を楽しませる商品として位置づけることだった...

統合アーキテクチャ: 分散データベースを再定義し、コアビジネスシステムに参入

[51CTO.comよりオリジナル記事]インターネットの急速な発展に伴い、人類社会におけるデータ量は...

愛邦の変革から見る垂直生活検索:地域情報の爆発

最近、Aibang.comは戦略的なアップグレードを発表し、新しい生活検索サービスであるNearby...

2018年グローバルクラウドコンピューティング市場分析概要

今日、クラウド コンピューティング プラットフォームとアプリケーションは、新しいデジタル ビジネスを...

kdatacenter - 高速韓国VPS/韓国専用サーバー、Alipay対応、便利な購入

kdatacenterは2009年に韓国で設立されました。主に韓国のデータセンター(SKデータセンタ...

地域 SEO インデックスの低下は何を示していますか?

著者はブログを利用して地域SEOブログを作成しました。このブログは半年以上Baiduホームページで安...

IoTとエッジコンピューティングのためのサイバーセキュリティ

モノのインターネットには独自のサイバーセキュリティの考慮事項があり、サイバーセキュリティとエッジコン...