序文誰もが分散サービスを使用しているため、分散サービスでの同時データ更新の問題は避けられないと思います。 単一システムの場合、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 を使用した自動化パイプラインのリファクタリング
はじめに:KFC の現実的なアプローチであれ、マクドナルドの個性へのこだわりであれ、両社は中国市場で...
「検索+情報フローのデュアルエンジン、百家号+ミニプログラムのデュアルエコシステム」というモバイルコ...
v.psはどうですか? v.ps 香港はどうですか? v.psは香港にデータセンターを持ち、香港クラ...
[要約] Autohomeは、自動車電子商取引ビジネスをターゲットにし、Bitautoとの競争を激化...
VMware (NYSE: VMW) と IBM (NYSE: IBM) は先日、VMware Ex...
Racknerd は現在、米国西海岸のロサンゼルスにある Multacom データ センターにあるク...
[[427506]]近年、クラウド、ビッグデータ、AI、ブロックチェーンなどの技術の発展に伴い、IT...
オンラインプロモーションでは、商品や物を宣伝する方法がたくさんあります。百度やGoogleなどの検索...
外部リンクは、SEO 最適化のための最も基本的な作業にすぎません。千里の道も一歩から始まり、大地の上...
多くの人が SEO について誤解しています。 SEO を神話にする。実際のところ、SEO は単なる補...
2012 年 6 月と 7 月は、Baidu の最適化に取り組んでいた国内のウェブマスターにとって暗...
2013年はWeiboマーケティング、O2O、モバイルインターネットがホットワードになるだろう。今日...
ガートナーの最新の調査によると、クラウド コンピューティングは、リスク、監査、財務、コンプライアンス...
今日は木曜日、寝る前に、多くのウェブマスターと同じようにウェブサイトの状態を確認しました! 私のウェ...
1社は民間の宅配便大手、もう1社は物議を醸す電子商取引界の大物だ。外の世界では「不可分」とみなされて...