分散ロックを実装する一般的な方法は 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 管理のリーダーに
2022 年 12 月 12 日、Amazon Web Services は2022 re:Inve...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています昨今、オン...
raksmart 独立サーバーは特別プロモーション中です。今回は 100Mbps、1Gbps、10G...
justhostはどうですか? JustHost Italy VPS はいかがでしょうか? Just...
世界のクラウド サーバー市場における最初の破壊者は誰かを知りたいなら、間違いなく DigitalOc...
北京から記者の唐勲芳が報告します電子商取引はオフラインで「反撃」し始めた。 1月10日、本紙記者はQ...
Baidu は、ユーザー エクスペリエンスを向上させるためだと主張して、大規模なサイト禁止を実施して...
みなさんこんにちは。私はShi Touです。企業のウェブサイトを最適化する過程では、常にいくつかの厄...
12月10日、アマゾン中国は北京で2015年の年間書籍ランキングを発表した。これには「年間書籍売上ラ...
[51CTO.com クイック翻訳] Amazon の Amazon Web Services (A...
ウェブサイトの外部リンクを最適化する方法は無数にありますが、最も簡単な最適化方法は「フォーラム署名」...
1. クラウド環境のコンプライアンスはどの程度ですか?クラウドで運用している企業組織には、規制やセキ...
昨日、アラジンミニプログラム統計プラットフォームは「2018年5月のWeChatミニプログラムトップ...
百度は、奇虎360が自社のウェブサイトのコンテンツをコピーしたことは不正競争に当たるとして、北京市第...
サイバーセキュリティの世界では、サイバー脅威と戦うことは、終わりのない多次元のモグラ叩きゲームをプレ...