2014-08-31 4 views
7

Die Idee ist es, weniger Verbindung und bessere Leistung zu verwenden. Läuft die Verbindung zu irgendeinem Zeitpunkt ab?Die richtige Art der Verwendung von StackExchange.Redis

Und für eine andere Frage, öffnet _redis.GetDatabase() neue Verbindung?

private static ConnectionMultiplexer _redis; 
private static IDatabase _db; 

public RedisCacheProvider(string configuration) 
{ 
    if (_redis == null) 
     lock (myLock) 
      if (_redis == null) 
      { 
       _redis = ConnectionMultiplexer.Connect(configuration); 
       _db = _redis.GetDatabase(); 
      } 
} 

public async Task<string> GetString(string key) 
{ 
    string result = null; 

    RedisValue val = await _db.StringGetAsync(key); 

    if (val.HasValue) 
     result = val; 

    return result; 
} 

Antwort

10

Nein, ein Multiplexer läuft nicht ab. No GetDatabase öffnet keine neue Verbindung. Dies alles wird in basics.md bedeckt - insbesondere:

Das Objekt von GetDatabase zurückgegeben wird, ist eine billige Pass-thru-Objekt, und muss nicht gespeichert werden.

+0

Gibt es einen Leistungseinfluss durch die Verwendung eines statischen IDatabase-Objekts im Vergleich zum Aufrufen von GetDatabase jedes Mal, wenn Sie eine der Methoden aufrufen müssen? – Aaron

+0

@Aaron für db 0-15 und ohne einen asynchronen Zustand, in den letzten Builds: überhaupt nicht. (Hinweis: '.GetDatabase()' ist db 0 ohne Async-Status, also: kein Overhead). Für ältere Builds, dbs über 15 oder mit einem async-state: minimal - ein einzelnes Objekt wird zugewiesen –