序文誰もが分散サービスを使用しているため、分散サービスでの同時データ更新の問題は避けられないと思います。 単一システムの場合、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 を使用した自動化パイプラインのリファクタリング
リトアニアのホスティング プロバイダー bacloud には、安価な独立サーバーが複数あります。プロ...
いつの間にか、オリンピックの16日間の開催が始まりました。今回のオリンピックでは、オリンピックイベン...
日本の収穫期には、農家の中には毎日多くの時間を費やして、農場で収穫したキュウリを種類ごとに仕分けする...
今日は、Baidu への参入に関する経験を皆さんと共有したいと思います。最近は暇だったので、自分でた...
グーグルや百度などの検索エンジンのアルゴリズムがここ数日継続的に調整されていることから判断すると、モ...
2001年設立のインモーションホスティング傘下の仮想ホスティングブランド、Webhostinghub...
新しいウェブマスターのウェブサイトの開発が遅かったり、満足のいく結果が得られなかったりする主な理由の...
2012年の天猫ダブルイレブンで売上高が1億元を超えた最初のアパレルブランドとして、今年のダブルイレ...
最近、GoogleのPRアップデートにより、主要なウェブマスターフォーラムやQQグループのウェブマス...
著者は歴史書、特に皇帝に関する本を読むのが好きです。私の意見では、古代の皇帝の思想は常に非常に深いた...
2019 年 6 月 12 日、顧客のデータベースのクラウド移行を支援する Microsoft In...
11月17日、ビリビリ(以下、「ビリビリ」)とiQiyiは、2019年9月30日までの第3四半期の財...
私は3年間ウェブサイトを作ってきました。何も知らない小さなウェブマスターから、5つのウェブサイトを所...
1. ブロックされたウェブサイトとは何ですか?ウェブサイトがブロックされると、ウェブマスターはそれを...
立ち上げたばかりのショッピングモールのウェブサイトを運営するのは少し難しいです。ショッピングモールの...