2014-08-31 27 views
7

這個想法是使用較少的連接和更好的性能。 連接是否在任何時候到期?正確的方式使用StackExchange.Redis

而另一個問題,_redis.GetDatabase()是否打開新的連接?

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

回答

10

不,多路複用器不會過期。沒有GetDatabase不會打開一個新的連接。這全部包含在basics.md中 - 特別是:

從GetDatabase返回的對象是一個便宜的傳遞對象,並且不需要存儲。

+0

每次需要調用其中一個方法時,是否通過使用靜態IDatabase對象與調用GetDatabase來影響性能? – Aaron 2017-08-18 19:37:02

+0

@Aaron for db 0-15並且沒有異步狀態,在最近的版本中:根本沒有。 (注意:'.GetDatabase()'是沒有異步狀態的db 0,所以:沒有開銷)。對於舊版本,大於15的dbs或者async-state:minimal - 分配一個對象 – 2017-08-18 21:22:24