この記事では、次の内容について説明します。 1. 分散ロックとは何ですか? 2. 解決策
3. まとめ Redis は、いくつかの単純なデータ型を持つキー/値データベースです。今では分散ロック、電流制限ツール、メッセージキューになってしまい、もうダメになりそうです。しかし、Redis は、その極めて高いパフォーマンスと使いやすさにより、多くの場面で開発者に愛されています。 インタビュー中、Redis について話すとき、多くの人の最初の反応はキャッシュです。実際、キャッシュに加えて、Redis には豊富な使用シナリオが数多くあります。今後、Song Ge はこれらの使用シナリオを 1 つずつ皆さんと共有する予定です。 今日は、分散ロックに Redis を使用する簡単な例を見てみましょう。 1. 分散ロックとは何ですか?まず、問題のシナリオを見てみましょう。 たとえば、単純なユーザー操作、つまりユーザーのステータスを変更するスレッドでは、まずデータベースからユーザーのステータスを読み取り、次にメモリ内で変更し、変更が完了したらそれを保存し直します。単一スレッドではこの操作は問題ありませんが、マルチスレッドでは、読み取り、変更、保存の 3 つの操作はアトミック操作ではないため、マルチスレッドで問題が発生します。 この問題を解決するには、ロックが必要です。誰もがロックについてよく知っておく必要があります。 Java の synchronized および ReentrantLock 再入可能ロックは一般的ですが、これらのロックはローカル ロックです。現在、マイクロサービスと分散システムの考え方が人気です。このようなシステムでは、ローカル ロックだけでは明らかに不十分なので、誰もが分散環境でロックの問題を解決する方法を見つけようとしています。分散ロック問題を解決する方法は数多くあります。分散ロックの問題を解決するには、MySQL、ZK、または Redis を使用できます。ここでは主に、Redis を通じて分散ロックの問題を解決する方法について説明します。 2. 解決策 2.1 全体的な考え方 「分散ロックの背後にある考え方は非常にシンプルです。ライン シティが参入すると、最初に席を確保します。他のライン シティが運用を開始したときに、すでに誰かが席を確保していることがわかったので、諦めるか、後でもう一度試すことになります。」 Redis では、プレースホルダーは通常、setnx 命令を使用します。最初に到着したスレッドがプレースホルダーを取得します。スレッドの操作が完了すると、 del 命令が呼び出され、その場所が解放されます。同時に、デッドロックを防ぐために、通常はロックに有効期限を追加し、有効期限が切れると自動的に解除されます。 この考えに基づいて、2 つの異なる実装方法を見てみましょう。 2.2 解決策1 上記のアイデアに基づいて、setnx と expire を使用して分散ロックを実装できますが、setnx と有効期限の設定 expire は 2 つの操作です。これら 2 つの操作を一緒に実行した場合、それらはアトミックにはなりません (独自の Lua スクリプトを作成しない限り)。この問題を解決するために、Redis 2.8 以降では、setnx と expire を 1 つのコマンド set で一緒に実行できるようになりました。セットにはもう 1 つのパラメータがあります。 図からわかるように、キー/値の後には、有効期限を秒単位で示す EX 5 (有効期限をミリ秒単位で示す PX) があり、最後の NX は、k1 が存在しない場合はコマンドが正常に実行され、それ以外の場合は失敗することを意味します。これは、setnx の効果に相当します。 したがって、ロックを次のようにカプセル化します。
上記のコードでは、アイデアに焦点を当てており、コードの詳細を掘り下げる必要はありません。
2.3 解決策2 上記のコードはかなり長いので、もっと簡単な方法はありますか?もちろんありますよ!それがレディソンです。 Jedis の元のアプリケーションと比較して、Redisson は Redis リクエストのカプセル化をさらに進め、直接使用できるロックに対応するメソッドも提供しています。
このコードでは、核となるのは lock.tryLock(500, 1000, TimeUnit.MILLISECONDS); です。最初のパラメーターはロックを試行するための待機時間で、500 ミリ秒です。2 番目のパラメーターは、ロック タイムアウトが 1000 ミリ秒であることを示します。つまり、ロックは 1000 ミリ秒後に自動的に期限切れになります。 友人たちは、これがソリューション 1 で設定したパラメータと同じであることに気付きました。実際、アイデアは変更されていません。 Redisson は、私たちが書いたロック関連のメソッドをカプセル化するだけです。 3. まとめ もちろん、ここではロックの考え方と、単一の Redis マシンでロックする方法を簡単に紹介するだけにします。後ほど、Song 兄弟が Redis クラスターをロックする方法を説明します。 |
<<: クラウド コンピューティング プロバイダー間でネットワーク パフォーマンスがどのように異なるか
>>: 分散システムにおける「ゴースト再発」を解決するにはどうすればよいでしょうか?
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますモバイル時...
記者は6月2日、DAMOアカデミーのXG実験室とタオバオテクノロジーが共同開発したマルチパスQUIC...
2018 年 5 月 8 日 - デジタル変革、クラウド コンピューティング、新しい働き方の出現によ...
小説サイトを運営しても将来性がないと言う人が多い中、なぜ百度は「小説特集」を別途立ち上げたのでしょう...
ロングテールキーワードは通常 2 ~ 3 語で構成されますが、短いドメインになることもあります。 S...
アルゴリズムのアップグレードは、ウェブサイトのグループに「影響」を及ぼし、SEO の要求はますます厳...
年初から、セレブビジネスやライブ配信の人気が続いています。ライブ電子商取引の取引規模と参加者数は過去...
前回の記事「新規サイト立ち上げ後35日以内に百度1ページ目にランクインした実践体験」を読んで、私は大...
IDCの最新の「中国パブリッククラウドサービス市場(2021年下半期)追跡」レポートによると、中国の...
「中国は非常にユニークで興味深い市場であり、ある意味では逆転しており、個人消費者によるデジタル技術の...
過去数年間で最も人気があったウェブサイト形式のフォーラムは、近年徐々にWeiboとWeChatに追い...
Forrester Consulting は、従業員数 1,000 人以上の企業のクラウド テクノロ...
完全なイベント プランの計画には、イベント設計、リソース統合、通信パスの計画、データ監視、イベントの...
オンプレミス インフラストラクチャとクラウド プラットフォームのどちらを採用するかのメリットについて...
SEO に対する考え方は人それぞれです。SEO 担当者の間でも、学習経験や接するサイトの種類、その他...