序文誰もが分散サービスを使用しているため、分散サービスでの同時データ更新の問題は避けられないと思います。 単一システムの場合、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 を使用した自動化パイプラインのリファクタリング
Namebox は 2009 年にルーマニアで設立されました (Datacore Solution ...
データの出現により、ビジネス インテリジェンスは真に 21 世紀に移行しました。しかし実際には、「ビ...
簡単に大きな行動に出てしまう可能性のある彼女を前に、私は表面上は彼女を喜ばせようとしながらも、心の中...
Limewave は現在フラッシュセール プロモーションを実施しており、シアトル データ センターの...
みなさんこんにちは。最近何かが起こり、忙しくてオンラインになっていなかったので、記事をシェアしていま...
登録不要のホスト、登録不要のクラウドホスト:登録不要のホスト(登録不要のクラウドホスト)は、香港、台...
コミュニティ共同購入は、少し前にとても人気がありました。多くの商人や大手企業が野菜ビジネスに参入した...
毎日2時間以上「小紅書」(「小紅書」ユーザーの別名)を利用するヘビーユーザーとして、ここ数ヶ月、香港...
クラウドコンピューティングは急速な発展段階に入りました。パブリック クラウド テクノロジーとビジネス...
明けましておめでとうございます!今日は仕事初日です。皆さんがよい仕事に就き、たくさん稼げるよう祈って...
Argo CD は、宣言型 GitOps コンセプトに従う Kubernetes の継続的デプロイメ...
最近、国内で有名な著作権侵害・海賊版サイト「Ruoyu Chinese Network」が捜査を受け...
Chicagovpsからメールが届きました:9月8日、有名なデータセンターColorcrossing...
私は昨年8月20日に正式にWeChatパブリックプラットフォームを使い始めました。当時、パブリックプ...
ビッグデータは、最近インターネット大手が頻繁に言及する用語です。ビッグデータは徐々にインターネットを...