分散錠のC#のRedisの実装に基づいて、asp.net MVC asp.netコア

それはRedisのクラスタよりも大きい場合(単一のRedisことを条件とする)、分散ロックのRedisの実装に基づいて、非同期例外があってもよいです。

アイデアの実現:

setnxのRedisの使用(キー、値):「セットでない場合は終了する」、キー値が存在しない場合は、成功したキャッシュに入社し、キャッシュ時間を再設定し、1を返し、それ以外の場合は0を返します。

ここではより多くのキャッシュ時間よりも、システムが自動的にキャッシュを解放します。

成功した場合は、時間を制限する権利の効果的な実施に入る、それが失敗する許可を取得できませんでした。

次のサンプルコードを貼り付け。

参照NServiceKit.Redis NuGetを追加することで、コンソールプログラムを作成します。そして、過去に以下のコードをコピーします。あなたは例を実行することができます。

 

使用してシステムを。
使用してSystem.Collections.Genericを。
使用してSystem.Linqのを。
使用してSystem.Textのを。
使用してSystem.Threadingを。
使用してSystem.Threading.Tasksを。

名前空間RedisCheckTest
{
    使用して NServiceKit.Redisを; // NuGetでRedisのライブラリを追加し
    たクラスのプログラム
    {

        静的な 無効メイン(文字列[] argsを)
        {
            VaRの M = 0 一方、(M < 1000000 
            {
                M ++ ;
                 /// シミュレーション要求を繰り返し3回送信される
                ためVAR J = 1。 ; J <= 3 ; J ++ 
                {
                    CreateOrderApi(J)。
                }
                // (VAR 1 = I。; I <= 3; Iは++)用
                 // { // シミュレーション要求が繰り返し送信される三回
                 //     スレッドT2 =新しい新しいスレッド(CreateOrderApi);
                 //     t2.Start();
                 // } 
                スレッド.sleep(8000 )。
            }
            Console.ReadLine();
        }
        ///  <まとめ> 
        /// 例では、この方法は、注文を作成すること、である
         ///  </要約> 
        ///  <PARAM NAME = "言及ID上記"> </ PARAM> 
        ///  <戻りA> </戻りA> 
        プライベート 静的 無効 CreateOrderApi(int型REQUEST_ID)
        {
            ストリング parmaterid = P2は ; // これはリクエストIDパラメータのAPIであると仮定する

            VaRの nxkey = " CNX " + parmaterid。
            VaRの値= parmaterid。
            BOOL setnx = SetNX(nxkey、値)。
            もし(!setnx)
            {
                Console.WriteLineを(" RequestID:" + request_id.ToString()+ "  " + " あまりにも頻繁に要求、10秒後、再試行してください。" );
                 リターン;
            }
            // TODO:書き込み受注ここでロジック
         
            Console.WriteLineを(" RequestID:" + request_id.ToString()+ "  " + " 成功" );
        }


        constの 文字列のホスト= 127.0.0.1 const  int型ポート= 6379 ;
        パブリック 静的 ブール SetNX(文字列 cachekey、文字列値、int型 secondsTimeout = 5 
        {
            文字列 NamespacePrefix = " api01_ " 文字列のキー= NamespacePrefix + cachekey。
            使用してVARのクライアント= 新しいRedisClient(ホスト、ポート))
            {
                変更= System.Text.Encoding.UTF8.GetBytes(値)。
                もたらし= client.SetNX(キー、変更);
                だっ setnxは=(結果== 1)?;
                client.Set(キー、値、DateTime.Now.AddSeconds(secondsTimeout)); // バッファ5秒間キー
                リターンSETNX。
            }
        }
        
    }
}

 

おすすめ

転載: www.cnblogs.com/davies/p/11998895.html