分散ロックを実装する一般的な方法は 3 つあります。
現地面接のテストポイントは、Redis の使用に精通しているかどうかです。 Redis で分散ロックを実装する方法。 要点 Redisで分散ロックを実装するには、以下の条件を満たす必要があります。 相互排他性
デッドロックなし
フォールトトレランス
成し遂げる set key value px milliseconds nx コマンドを直接使用してデバイスをロックし、Lua スクリプトを使用してロックを解除することができます。
コードの説明
ロックコード解析 まず、set() は NX パラメータを追加して、キーがすでに存在する場合は関数が正常に呼び出されないようにします。つまり、相互排他性を満たすために、1 つのクライアントだけがロックを保持できます。次に、ロックに有効期限を設定しているため、ロック保持者が後でクラッシュしてロックを解除しなくても、有効期限に達するとロックは自動的にロック解除され(つまり、キーが削除され)、デッドロックは発生しません。最後に、ロックがどのリクエストに属しているかを識別するために requestId に値を割り当てるため、クライアントがロックを解除するときに、同じクライアントであるかどうかを確認できます。 コード分析のロック解除 Luaコードをjedis.eval()メソッドに渡し、パラメータKEYS[1]をlockKeyに、ARGV[1]をrequestIdに割り当てます。実行中、ロックに対応する値が最初に取得され、それが requestId と等しいかどうかが確認されます。等しい場合は、ロックが解除されます(キーが削除されます)。 リスク ロックに対応するキーを格納しているノードがクラッシュすると、ロックが失われ、複数のクライアントがロックを保持することになり、リソースの排他的使用ができなくなるリスクがあります。
マスタースレーブ切り替え、スレーブノードがマスターノードに昇格される 3. クライアント B は、クライアント A がすでに取得している同じリソースに対して別のロックを取得します。これにより、複数のスレッドが同時にロックを取得することになります。 レッドロックアルゴリズムが登場 このシナリオでは、5 つの Redis マスター インスタンスを持つ Redis クラスターがあることを前提としています。次に、ロックを取得するには次の手順を実行します。
Redis は、Redis ベースの分散ロックを実装するために、上記の 2 つの方法を公式に提供しています。詳しい説明については以下を参照してください。 https://redis.io/topics/distlock。 Redisson 実装 Redisson は、Redis をベースに実装された Java インメモリ データ グリッドです。一連の分散型 Java 共通オブジェクトを提供するだけでなく、再入可能ロック (Reentrant Lock)、公平ロック (Fair Lock)、インターロック (MultiLock)、レッドロック (RedLock)、読み取り/書き込みロック (ReadWriteLock) などを実装し、多くの分散サービスも提供します。 Redisson は、Redis を使用する最も簡単で便利な方法を提供します。 Redisson の目的は、Redis 上のユーザーの関心の分離を促進し、ユーザーがビジネス ロジックの処理に集中できるようにすることです。 Redisson 分散再入可能ロックの使用 Redisson は、シングルポイント モード、マスター スレーブ モード、センチネル モード、クラスター モードをサポートしています。ここではシングルポイントモードを例に挙げます。
ロックフローチャート フローチャートのロック解除 RedissonLock は再入可能であり、失敗の再試行を考慮していることがわかります。ロックの最大待機時間を設定できます。無効なロックの適用を減らし、リソースの使用率を向上させるために、実装にいくつかの最適化も行われました。 RedissonLock では、ノードがクラッシュしたときにロックが失われるリスクも解決されないことに注意することが重要です。現実には、許容できないシナリオもいくつかあるため、Redisson は redlock アルゴリズムを実装する RedissonRedLock を提供しています。 RedissonRedLock は単一障害点の問題を真に解決しますが、その代償として、RedissonRedLock 用に追加の Redis 環境を構築する必要があります。 したがって、ビジネス シナリオでこのような小さなエラーの可能性を許容できる場合は、RedissonLock を使用することをお勧めします。許容できない場合は、RedissonRedLock を使用することをお勧めします。 |
<<: 世界はこれまで以上にクラウドネイティブを必要としている
>>: SUSE が Rancher Labs を買収し、エンタープライズ Kubernetes 管理のリーダーに
Google は最近、SEO に過度に取り組んでいる多数のウェブサイトを罰しており、その結果、収益を...
いわゆる口コミマーケティングは口コミです。例えば、私が電化製品を販売するタオバオストアを持っている場...
AWS Lambda を使用すると、サーバーをプロビジョニングしたり管理したりせずにコードを実行でき...
今日、目が覚めて自分のウェブサイトを開いたとき、ビルから飛び降りたい気分でした。まず、Baidu 検...
暗号通貨、機械学習、ビッグデータなどの計算集約型テクノロジーの急速な導入により、データセンターの電力...
Profitserver は常に無制限トラフィックの VPS サービスに重点を置いてきました。コア ...
DediCube LLC (サーバーレンタルおよびホスティング) 傘下の VPS ブランドである B...
Hostround はアメリカのホスティング会社です。主な業務はサーバーのレンタルですが、仮想ホステ...
道端のコミュニティからの噂:中国電信はcn2 giaを違法に販売する者を処罰するだろうあるいは市場を...
個別に注文を受ける方は、さまざまなお客様に出会うことになります。こうしたお客様とどのように接していま...
新しいウェブサイトが最短時間でランキングのメリットを最大化する方法こそが、すべての SEO 担当者が...
企業は俊敏性を高め、ビジネス継続性のためにクラウドとリモート監視に重点を置く必要があります。テクノロ...
リースウェブは、1997 年に設立された、歴史のある有名なインターネット アプリケーション プロバイ...
[51CTO.com からのオリジナル記事] 360 Enterprise Security Gro...
1か月の交渉の後、投資家と創業チームの間の対立は再び激化し、生き残るためにベンチャーキャピタルに依存...