序文デフォルトのロックロジックは不公平です。 ロックが失敗すると、スレッドは while ループに入り、ロックの取得を試行し続けます。このとき、複数のスレッドが競合することになります。つまり、最初にそれを獲得した人がそれを所有することになります。 Redisson は、次のように使用できる公平なロック メカニズムを提供します。
公平ロックがどのように実装されるかを見てみましょう。 1フェアロックこれまでの記事を読んだ後は、すでにこのメソッドに精通しており、ソース コード メソッド RedissonFairLock#tryLockInnerAsync を直接見つけることができると思います。 わあ、これは膨大なコードなので、スクリーンショットですべてをキャプチャすることはできません。そのため、Lua スクリプトを直接分析してみましょう。 PS: Lua は理解できませんが、これらの if else の山はおそらく理解できるでしょう。 デバッグで command == RedisCommands.EVAL_LONG が見つかったため、次の部分を直接確認します。 長すぎて「いい人」って何回も言ってしまいました! まずパラメータが何であるかを見てみましょう。
ロック キューとセットは中括弧で囲まれた文字列です。 {XXXX} は、このキーがスロット位置を計算するために XXXX のみを使用することを意味します。 2Luaスクリプト解析上記の Lua スクリプトはいくつかの部分に分かれています。上記のコードの実行をさまざまな角度から見てみましょう。 最初のロック(スレッド1) 最初の部分では、ロックするのは初めてなので、待機キューは空であり、ループは直接飛び出します。実行のこの部分は終了しました。 パート II:
ここで実行したら戻ります。なので、今のところ以降の部分は読みません。 次の 2 つのコマンドと同等です (Lua スクリプト全体がアトミックです)。
スレッド2ロック Thread1 がロックを完了すると、Thread2 がロックを開始します。 Thread2 は、このインスタンスの別のスレッド、または別のインスタンスのスレッドにすることができます。 最初の部分では、ロックは Thread1 によって占有されていますが、待機キューは空なので、ループは直接飛び出します。 2 番目の部分では、ロックが存在するので、スキップします。 3 番目の部分は、スレッドがロックを保持しているかどうかです。そうでない場合は、直接スキップしてください。 4 番目の部分は、スレッドが待機キューにあるかどうかです。Thread2 はそれをロックし、そうでない場合は直接スキップされます。 スレッド2はここで終了します:
zadd KEYS[3] タイムアウトARGV[2] ここでは、zadd コマンドを使用して、redisson_lock_timeout:{anyLock}、タイムアウト タイムスタンプ (1624612689520)、およびスレッド (UUID2:Thread2) を配置します。 タイムアウト タイムスタンプは、順序付けられたセット内でソートするためのスコアとして使用され、ロックの順序を示します。 スレッド3ロック スレッド 1 がロックを保持し、スレッド 2 が待機し、その後スレッド 3 が来ます。 firstThreadId2を取得します。この時点で、キューには UUID2:Thread2 のスレッドがあります。 firstThreadId2 のスコア (タイムアウト タイムスタンプ) が現在のタイムスタンプより小さいかどうかを判断します。 タイムアウト以下の場合は、firstThreadId2 を削除します。 より大きい場合は、その後の判定に入ります。 2番目、3番目、4番目の部分は要件を満たしていません。 Thread3 もここで終了します:
3 まとめこの記事では主に、多くの Redis 操作に関係するフェア ロックのロック ロジックについてまとめます。以下に簡単な要約を示します。
理解しておく必要があるのは、追加の待機キューと順序付きセットがここに追加されるということです。 この記事はWeChatの公開アカウント「Programmer Xiaohang」から転載したもので、以下のQRコードからフォローできます。この記事を転載する場合は、プログラマーXiaohangの公式アカウントまでご連絡ください。 |
<<: 分散データベース システムのフォールト トレランス - 100% の成功率、タイムアウト、パフォーマンス
>>: FONEは2021年中国消費財業界CIOカンファレンスに参加し、ビジネスと金融のデジタル変革について議論しました。
最近、とても面白いことが起きています。そういうゲームがあるんです。相手がそのゲームをやっているとわか...
鉄閣は春節に帰省した際、田舎から都市への新年の挨拶メッセージが明らかにテキストメッセージからWeCh...
みなさんこんにちは。私は飛虎映画ウェブサイトの所有者です。タイトルの通り、私の映画コレクションウェブ...
観光ウェブサイトは、文化観光ウェブサイトと自然観光スポットウェブサイトに分かれています。現在の観光ス...
[51CTO.com クイック翻訳] Kubernetes の使用は必ずしも簡単ではありません。クラ...
10月22日から24日まで、国家次世代インターネットエンジニアリングセンターが主催し、南京江北新区...
月収10万元の起業の夢を実現するミニプログラム起業支援プラン新しいメディアプラットフォームの発展に伴...
Dogyun はネズミ年を歓迎し、プロモーションを実施しています: 1. Dynamic Cloud...
[[438392]]調査会社 IDC は、回復力と信頼性の問題、データ主導の運用の複雑さ、ビジネス成...
みなさんこんにちは。SEOを行う際、キーワードリサーチに重点が置かれます。多くの友人がこの点で良い仕...
クラウド時代の発展とともに、データベースの物語は続きます。 Oracle の商用バージョンであれ、M...
Hostcat は、bandwagonhost に関するプロモーション記事を公開しました: band...
ウェブサイトの最適化に取り組んでいる SEO 担当者は、ウェブサイトの効果を最大限に高めたいと考えて...
オンライン情報への監視強化を求める世論を背景に、電子商取引サイトのプロモーション登録も関係部門の議題...
一般人にとって、中秋節は家族が集まる良い日ですが、マーケティング担当者にとっては頭を悩ませ、頭がゾク...