分散ロックを実装する一般的な方法は 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 管理のリーダーに
ウェブサイトの降格といえば、6月末のBaiduアルゴリズムの大規模なアップデート(大量のスパムサイト...
最適化が適切かどうかをどのように判断しますか?最適化が適切に行われているかどうかをどのように判断しま...
15ドルのVPS(標準128MメモリVZ)が目新しくなくなった頃、以前書いた安価な1Gメモリ(ope...
2013年2月19日、Baiduのアルゴリズムが再び調整されました。Baiduのウェブ検索不正対策チ...
Baidu が最新の発表で、ザクロアルゴリズムがまもなく開始されると主張して以来、多くのウェブマスタ...
はじめに:皆さん、こんにちは。これらは最近起こったいくつかの状況です。私はタオバオの顧客として、タオ...
Baidu の数回のメジャーアップデートにより、SEO に携わる私たちはさまざまな精神的打撃を受けた...
関連性を体系的に説明し、例示する記事をたくさん見てきましたが、私が言いたいのは、衣料品店は本当に衣料...
安価なVPS、特に米国の安価なVPSを購入したい場合は、Cloudconeが発売した新しいHDDハー...
筆者は、ソフト コピーライティングとソフト コピー マーケティングに関する第 9 回 A5 トレーニ...
IDCの最新の「中国パブリッククラウドサービス市場(2021年下半期)追跡」レポートによると、中国の...
今年 2 月に invs 社を紹介しましたが、一般的にはあまり注目されていませんでした。1 年後の ...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスショッピングモール内の店...
Vexxhost は、7 年間運営している企業で、VPS 構成をアップグレードおよび増加し、価格を下...
資本市場では話題に事欠かない。早期の独立上場を目指すDianpingは今日、張涛氏が率いるホテル・旅...