Redisのに基づいて、C#が分散ロックを達成します

    [このブログは、元に属し、転載については、ソースを明記してください:gdoujkzz]

  株が売られ過ぎので、しばしばピーク期間における場合、分散ロックの最終用途に応じてRedisの、本明細書アウトと共有に基づいて達成される関連する最近の研究。

  準備:centos7、Redisの、Nginxは、とJMeterのテストツール。

  従来の単一のアーキテクチャ

    従来のプロセスでは、我々は次のように次の簡単なコードのインベントリ操作は書きました:

    以下は、在庫のインタフェース動作(削減)を作成し、私はこのアプローチのパフォーマンス、多くの同志たちは株価が売られ過ぎの表示されないとき、高い並行性を確保するために、このようなAプラスロックを書き込むことができることを信じていAspNetCore.WebAPIに基づいています問題は、そのようなアプローチは売られ過ぎの結果発生しません最後の状況は私たちの記事で、我々が議論したいの範囲を超えているのですか?これは従来のエンタープライズアプリケーション、モノマー構造であれば、以下に示すように、需要を満たすことができます。   

使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.Linqのを。
使用してSystem.Threading.Tasksを。
使用してMicrosoft.AspNetCore.Mvcを。
使用してStackExchange.Redisを。

名前空間WebApplication1.Controllers 
{ 
    [ルート(" API / INV " )] 
    [ApiController] 
    パブリック クラスInvController:ControllerBase 
    { 

        プライベート 静的 読み取り専用 オブジェクト LockObject = 新しい オブジェクト();
        プライベート 静的な 読み取り専用ConfigurationOptionsオプション= 新しいConfigurationOptions()
        { 
            エンドポイント = {{ " 192.168.232.132 "6379 }}、
            パスワード = " 123456 " 
        }。


        【HTTPGET] 
        公共のActionResult < ストリング > (GET)
        { 
            文字列 MSG = NULL ;
            ロック(LockObject) 
            { 
                int型 invQty = GetInvQty()。
                もし(invQty> 0 
                { 
                    InvQty = invQty - 1 ; 
                    SetInvQty(invQty); 
                    MSG = $ " 控除は成功し、現在の在庫:invQty {} " ; 
                } 
                
                { 
                    MSG = " 推論が失敗し、在庫不足" ; 
                } 
            } 
            Console.WriteLineを(MSG) ; 
            リターンMSG; 
        } 


        プライベート INT GetInvQty()
        { 
            VAR数量= 0 ;
             使用VAR CONN = ConnectionMultiplexer.Connect(オプション))
            { 
                VAR DB = conn.GetDatabase()。
                数量 = Convert.ToInt32(db.StringGet(" InvQty " )); 
            } 
            戻り数量。
        } 

        プライベート ボイド SetInvQty(INTの数量)
        { 
            使用VAR CONN = ConnectionMultiplexer.Connect(オプション))
            { 
                VAR DB = conn.GetDatabase()を。
                db.StringSet(" InvQty "、数量)。
            } 
        } 
    } 
}

      ますます複雑なビジネスでは、モノマーアーキテクチャのこの形式は、当社の通常の業務のニーズを満たすために失敗した、多くの企業が、このアーキテクチャモデル次へと進化しました。

   分散アーキテクチャ

    

    

  

おすすめ

転載: www.cnblogs.com/gdouzz/p/12097968.html