2015-09-11 18 views
7

私はAzureのRedisのキャッシュに接続するために、この慣行に従うことが最善であることを読んだ:AzureのRedisのStackExchange.Redis ConnectionMultiplexer

private static ConnectionMultiplexer Connection { get { return LazyConnection.Value; } } 

    private static readonly Lazy<ConnectionMultiplexer> LazyConnection = 
     new Lazy<ConnectionMultiplexer>(
      () => 
      { 
       return 
        ConnectionMultiplexer.Connect(connStinrg); 
      }); 

そしてAzureのRedisのドキュメントによると:

Azure Redis Cacheへの接続は、ConnectionMultiplexerクラスによって管理されます。このクラスは、クライアントアプリケーション全体で共有および再利用されるように設計されており、操作ごとに作成する必要はありません。

したがって、私のASP.net MVCアプリケーションでConnectionMultiplexerを共有するためのベストプラクティスは何ですか? Global.asaxで呼び出す必要がありますか、コントローラごとに1回、またはsmthを初期化する必要があります。それ以外は?

また、私はサービスとの通信を担当するサービスを持っているので、サービス内でRedisと通信したい場合は、ConnectionMultiplexerのインスタンスをControllersから送信するか、すべてのサービスで初期化するか?

ご覧のとおり、私はここで少し失われていますので、助けてください!

答えて

6

ドキュメントが正しい場合は、ConnectionMultiplexerのインスタンスを1つしか持たずに再利用する必要があります。複数作成しないでください。shared and reusedが推奨されます。

作成部分では、コントローラまたはGlobal.asaxに存在しないようにしてください。通常、内部にConnectionMultiplexerのプライベート静的インスタンスを使用する独自のRedisCacheClientクラス(多分ICacheインターフェイスを実装する)を作成する必要があります。これは、作成コードがあなたの質問に書いた通りです。 Lazy部分は、初めてConnectionMultiplexerを使用するまで、ConnectionMultiplexerの作成を延期します。

0

Dears;

次のコードを使用すると、StackExchange.Redis ConnectionMultiplexerを再利用できます。コードの任意のレイヤーで使用できます。

public class RedisSharedConnection 
{ 
    private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() => 
    { 
     ConnectionMultiplexer connectionMultiplexer = ConnectionMultiplexer.Connect(ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString); 
     connectionMultiplexer.PreserveAsyncOrder = false; 
     return connectionMultiplexer; 
    }); 

    public static ConnectionMultiplexer Connection 
    { 
     get 
     { 
      return lazyConnection.Value; 
     } 
    } 
} 
関連する問題