2015-09-11 12 views
7

Czytałem, że w celu podłączenia do Azure Redis cache jest najlepszy do tej praktyki:Azure Redis StackExchange.Redis ConnectionMultiplexer w ASP.NET MVC

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

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

i zgodnie z docs Azure Redis:

Połączenie z usługą Pamięć podręczna Redis Azure jest zarządzane przez klasę ConnectionMultiplexer. Ta klasa została zaprojektowana do współdzielenia i ponownego użycia w aplikacji klienckiej i nie musi być tworzona na zasadzie pojedynczej operacji.

Co należy zrobić, aby udostępnić narzędzie ConnectionMultiplexer w mojej aplikacji ASP.net MVC? Powinien zostać wywołany w Global.asax, czy powinienem go zainicjować raz na kontrolera lub coś podobnego. jeszcze?

Mam również usługę, która ma za zadanie komunikować się z aplikacją, więc jeśli chcę komunikować się z Redis w ramach usługi, powinienem wysłać instancję ConnectionMultiplexer do usługi od kontrolerów lub powinienem zainicjować ją we wszystkich moich usługach, lub ?

Jak widać jestem trochę zagubiony, więc proszę o pomoc!

Odpowiedz

6

Dokumenty mają rację, powinieneś mieć tylko jedno wystąpienie ConnectionMultiplexer i użyć go ponownie. Nie twórz więcej niż jeden, zaleca się, aby był on shared and reused.

Teraz do części kreacji nie powinno być w kontrolerze ani w Global.asax. Zwykle powinieneś mieć własną klasę RedisCacheClient (być może implementującą jakiś interfejs ICache), która używa wewnątrz statycznej instancji ConnectionMultiplexer i tam właśnie powinien znajdować się twój kod kreacji - dokładnie tak, jak napisałeś to w pytaniu. Część Lazy odroczy tworzenie kreatora ConnectionMultiplexer, dopóki nie zostanie użyty po raz pierwszy.

0

Dears;

Możesz ponownie użyć StackExchange.Redis ConnectionMultiplexer, używając następującego kodu. Można go użyć w dowolnej warstwie kodu.

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