7

ich gelesen habe, dass, um Azure Redis Cache zu verbinden ist am besten, diese Praxis zu folgen:Azure Redis StackExchange.Redis ConnectionMultiplexer in ASP.net MVC

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

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

Und nach Azure Redis docs:

Die Verbindung zum Azure Redis Cache wird von der ConnectionMultiplexer-Klasse verwaltet. Diese Klasse wurde für die gemeinsame Nutzung und Wiederverwendung in der gesamten Clientanwendung entwickelt und muss nicht pro Vorgang erstellt werden.

Was ist die beste Vorgehensweise für die gemeinsame Nutzung von ConnectionMultiplexer über meine ASP.net MVC App? Sollte es in Global.asax aufgerufen werden, oder sollte ich es einmal pro Controller oder SMS initialisieren. sonst?

Auch ich habe Dienst, der beauftragt ist, mit der App zu kommunizieren, also wenn ich mit Redis innerhalb des Dienstes kommunizieren möchte, sollte ich Instanz von ConnectionMultiplexer zum Dienst von Controllern senden, oder sollte ich es in allen meinen Diensten initialisieren, oder ?

Wie Sie sehen können, bin ich hier ein wenig verloren, also bitte helfen Sie!

Antwort

6

Die Dokumentation ist richtig, Sie sollten nur eine Instanz von ConnectionMultiplexer haben und sie erneut verwenden. Erstellen Sie nicht mehr als eins, es wird empfohlen, dass es shared and reused ist.

Jetzt für den Erstellungsteil sollte es nicht in Controller oder in Global.asax sein. Normalerweise sollten Sie Ihre eigene RedisCacheClient-Klasse haben (vielleicht eine ICache-Schnittstelle implementieren), die eine private statische ConnectionMultiplex-Instanz verwendet, und dort sollte Ihr Erstellungscode sein - genau so, wie Sie es in Ihrer Frage geschrieben haben. Der Lazy Teil verzögert die Erstellung des ConnectionMultiplexers bis zur ersten Verwendung.

0

Dears;

Sie können StackExchange.Redis ConnectionMultiplexer mit dem folgenden Code erneut verwenden. Es kann in jeder Ebene Ihres Codes verwendet werden.

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; 
     } 
    } 
}