Ah Fen は最近 Redis に魅了されています。なぜ? Redis は確かに非常に強力だと感じます。メモリベースのシステムであるキー値ストレージデータベースには、実は非常に多くの機能があります。 Ah Fen も Redis を本格的に学びたいと思っています。やはり、Redis は面接時に非常にプラスになるポイントだと言えます。 分散ロック分散ロックはなぜ必要なのでしょうか? 現在、多くの大規模プロジェクトはすべて分散ベースであり、分散シナリオにおけるデータの一貫性の問題は常に無視できない問題となっています。分配に関するCAP理論をご存知ですか? CAP 理論によれば、分散システムは一貫性、可用性、および分断耐性を同時に満たすことはできず、最大でもそのうちの 2 つしか満たすことができません。 私たちのシステムは、最終的には常に最終的な一貫性を満たしますが、この最終的な一貫性のために、分散トランザクションについて質問する人もいれば、分散ロックに焦点を当てる人もいます。 分散ロックの種類
しかし、Ah Fen は分散ロックを実装するためにキャッシュを使用することを選択しました。これは、私たちのプロジェクトで最も一般的に使用されている Redis です。 Redis は、次のようなさまざまな場所で使用できます。
今日は、Redis を使用して分散ロックを実装し、その使い方を学びます。 準備1. Jedis jar パッケージを使用する準備をし、jar パッケージをプロジェクトにインポートします。
ツールクラスを書いてみましょう。
jedis.set(lockKey、requestId、SET_IF_NOT_EXIST、SET_WITH_EXPIRE_TIME、expireTime);このロック姿勢こそが最も理解する必要があるもので、そうでなければ使い方が分からないでしょう。 key: ロック キーは、実際には一意のフラグに相当します。異なるフラグを使用して、異なるビジネスをロックできます。 requestId: これは実際にデバイスをロックするために使用されるリクエストを識別するために使用されます。分散ロックでは、ロックとロック解除は同じクライアントによって実行されなければならないということを知っておく必要があります。 もう 1 つの典型的なケースは、B が A のロックを解除し、解除の混乱が生じるというものです。同じリクエストを追加しない場合は、スレッド A がビジネスを処理し、ロックを実行します。ロックは 5 秒後に期限切れになり、スレッド B はロックを取得しようとします。 A が 5 秒以上ビジネスを処理すると、A はロックの解除を開始しますが、B はこの時点でロックを検出しないため、ロックします。 A が対応する業務の処理を終了していない場合、処理を終了した後にロックを解除すると、B が追加したロックがそのまま解除されるか、ロックがまったく解除されなくなります。 SET_IF_NOT_EXIST: 名前が示すように、キーが存在しない場合は、Set 操作を実行します。存在する場合は何もせず、ロックも行いません。 SET_WITH_EXPIRE_TIME: 期限切れにするかどうか expireTime: キーの有効期限を設定します。あなたのビジネスがロックされ、後続のビジネスがそれをロックしたい場合、ロックを保持したまま期限が切れた後にロックを解除しないと、問題が発生します。 上記のメソッドでは、tryGetDistributedLock が通常使用するロック メソッドです。 ロック解除
このスクリプトを見ると、少し奇妙に感じるかもしれません。実はこれは Lua スクリプトであり、Lua スクリプトの意味は比較的単純です。
実はこのとき、del で削除できないのかと言う人もいます。試してみてください。このように書くと、リーダーがあなたの足を折るでしょう。 最初にロックの所有者を判別せずにロックを解除するこの方法では、どのクライアントでもいつでもロックを解除できるようになります。つまり、ロックを追加しなくても、開けることができるのです。これはどのように機能するのでしょうか? ここに誰でも使えるコードがあります。比較的シンプルですが、プロジェクトで直接使用できます。
分散ロックの要件
分散CAP定理まずはこの方法を実践してみて、その後、皆さんが一番知りたがらない理論的な知識についてお話しします。結局のところ、この理論的な知識は面接でよく聞かれるものです。 分散CAP理論: カリフォルニア大学バークレー校のエリック・ブリューワー教授は、ACM PODC カンファレンスで CAP 予想を提唱しました。 2年後、MITのセス・ギルバートとナンシー・リンチがCAPを理論的に証明しました。その後、CAP 理論は分散コンピューティングの分野で正式に認められた定理となりました。 つまり、20年前、CAP理論は単なる推測に過ぎなかったのです。その結果は2年後に確認されたので、人々が流通を考えるときに考える根拠ができて、もはや単なる空想ではなくなりました。 分散CAP定理とは何ですか?分散システムは、一貫性、可用性、パーティション耐性の 3 つの要件のうち、最大でも 2 つしか満たすことができません。 これは (Atomicity) とは異なります。CAP 理論の A とデータベース トランザクションの A は同じだが、単語が異なるため、どうして同じになるのでしょうか。 可用性: 分散の A は可用性を表し、サービスが常に利用可能であり、応答時間が正常であることを意味します。 分散システムを構築するときは、各ノードが安定していることを確認する必要があります。そうしないと、可用性が保証されず、分散型とは言えません。擬似分散型としか言いようがありません。 一貫性つまり、更新操作が成功してクライアントに返された後、すべてのノードのデータは同時に完全に一貫しています。 Redis を使用してデータを表示する場合、多くの面接官から「データベースとキャッシュの一貫性をどのように確保しますか?」と質問されるでしょう。 結局、読むだけなら問題ないのですが、更新となると、まずデータベースに書き込んでからキャッシュを削除するかどうかです。または、最初にキャッシュを削除してからデータベースに書き込むと、データの不整合が発生する可能性があります。 したがって、これに興味がある場合は、たとえば次のことを勉強することができます。
面接中にこれらすべてを面接官に明確に説明できれば、少なくとも自分の給与要件を満たすことができるはずです。 パーティション耐性: パーティション耐性分散システムでノードまたはネットワークのパーティション障害が発生した場合でも、一貫性と可用性を満たすサービスを提供し続けることができます。 実際、CAP 理論では、一貫性、可用性、分断耐性の 3 つの特性を同時に満たすことはできないため、いくつかのトレードオフを行う必要があります。 Redis 分散ロックの使い方を学びましたか? |
<<: マイクロソフト: メタバースの無限の可能性を探り、デジタル技術で業界のアップグレードを強化
>>: トレンド: 2022 年のクラウド コンピューティングに関する 3 つの予測
A5 に投稿するのは今回が初めてです。私はまだ新人で文章が下手なのは承知していますが、私が記録したの...
過去 10 年間で、多くの企業の IT 戦略は進化し、社内のリソースを厳密に保護することと、コンピュ...
Vultr が今年 3 月に開催した最新のイベントでは、新規ユーザーに 50 ドルを直接提供し、クラ...
Holderhost は特別プロモーション VPS を導入しており、公式の約束では、今回は 23 V...
マクリーン氏がコンテナを発明したとき、彼はおそらくこの輸送手段が経済のグローバル化を促進するとは考え...
みなさんこんにちは。私は湖南省出身のキネスです。今回は、編集者が新しいウェブサイトを最適化し、短期間...
1. 莫口傑Cの資金調達評価額は2億、Alexaランキングは半年間で5回ゼロにリセットMogujie...
11月初旬、Google Sitelinkにヒントを得たBaidu Sitelinkが正式にリリース...
ウェブサイトのキーワードレイアウトはウェブサイトにとって非常に重要です。優れたレイアウトは優れた構造...
以前、Xiwei Qiangwei 氏が紹介した記事「検索トラフィックこそが王様、トラフィックこそが...
Racknerd は、618 の年中期 VPS プロモーションを正式に開始しました。価格は年間 17...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますYunzh...
【TechWeb Report】12月17日夜、Googleの上級副社長兼Googleサイエンティス...
月給5,000~50,000のこれらのプロジェクトはあなたの将来です2018年には、人工知能技術、ブ...
Kubernetes は、開発者にマイクロサービスの導入において大きな利便性をもたらしましたが、同時...