2014-08-31 87 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