分散ロックを実装する一般的な方法は 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 管理のリーダーに
香港の VPS に注力してきた Dmit 社が、新製品を追加しました。ロサンゼルス CN2 GIA ...
新年はあっという間に終わります。新年に向けて準備して、ドメイン名、仮想ホスト、VPS、サーバーを準備...
Baidu の最近の動きは、歴史上最大規模のものと言えるでしょう。多くのウェブマスターが深刻な被害を...
ホストスペースは、ウェブサイト運営の基本的なプラットフォームであり、ウェブサイトページの表示速度やウ...
調査会社カナリスの調査によると、クラウドコンピューティングサービスへの世界の支出は2020年第2四半...
[[279395]]序文Docker入門Docker は、Docker が開発した軽量仮想化テクノロ...
エッジ コンピューティングは製造業界において革命的なテクノロジーとなり、企業の運営方法を変え、プロセ...
onetechcloudのUS cn2 gia vps特別イベントでは、月払いで20%割引、四半期払...
「フォーカスとセグメンテーションで勝つ」円卓会議(写真はテンセントテクノロジー撮影)テンセントテクノ...
8月以来、Host Catは37の記事を公開しました(この記事を含む)。ここでは、家庭内の兄弟が注目...
hostodo.com の格安 VPS が再入荷し始めました。Quadranet のロサンゼルス デ...
ウェブサイトのユーザーとして、ウェブサイトを使用する際に時々煩わしい点があることに気付くかもしれませ...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス昨夜、新型iPhone ...
周知のとおり、6月22日と6月28日の最近の出来事はインターネット上で広く伝えられ、多くのウェブマス...
ウェブサイトの初期の頃は、集中的なサービスを提供するために一般的に 1 台のマシンを使用していました...