2014-08-31 10 views
7

L'idea è di utilizzare meno connessioni e prestazioni migliori. La connessione scade in qualsiasi momento?Il modo corretto di utilizzare StackExchange.Redis

E per un'altra domanda, _redis.GetDatabase() apre una nuova connessione?

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

risposta

10

No, un multiplexer non scade. Nessun GetDatabase non apre una nuova connessione. Questo è tutto coperto in basics.md - in particolare:

L'oggetto ritornato da getDatabase è un economico pass-thru oggetto, e non ha bisogno di essere memorizzati.

+0

C'è un impatto sulle prestazioni utilizzando un oggetto IDatabase statico o chiamando GetDatabase ogni volta che è necessario chiamare uno dei suoi metodi? – Aaron

+0

@Aaron per db 0-15 e senza stato asincrono, nelle build recenti: per niente. (nota: '.GetDatabase()' è db 0 senza uno stato asincrono, quindi: nessun overhead). Per versioni precedenti, dbs superiore a 15 o con stato asincrono: minimo: viene assegnato un singolo oggetto –