这个想法是使用更少的连接以获得更好的性能。 连接是否会在任何时候过期?
另一个问题是,_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;
}
.GetDatabase()
是没有异步状态的db 0,因此没有开销)。对于旧版本、大于15的数据库或有异步状态的情况,只分配一个对象,开销很小。 - Marc GravellGetDatabase(2)
3 次,您可能会得到相同的对象 3 次,而不是 3 个不同的对象;但无论哪种方式:它都不需要做任何事情——调用GetDatabase
不会与服务器通信等。 - Marc Gravell