Pet*_*ner 6 azure redis servicestack.redis azure-redis-cache
我正在连接到Azure Redis,并且它们向我显示了与我的Redis服务器的打开连接数。我有下面的c#代码,其中包含我所有的Redis集和获取。这应该是泄漏的连接吗?
using (var connectionMultiplexer = ConnectionMultiplexer.Connect(connectionString))
{
lock (Locker)
{
redis = connectionMultiplexer.GetDatabase();
}
var o = CacheSerializer.Deserialize<T>(redis.StringGet(cacheKeyName));
if (o != null)
{
return o;
}
lock (Locker)
{
// get lock but release if it takes more than 60 seconds to complete to avoid deadlock if this app crashes before release
//using (redis.AcquireLock(cacheKeyName + "-lock", TimeSpan.FromSeconds(60)))
var lockKey = cacheKeyName + "-lock";
if (redis.LockTake(lockKey, Environment.MachineName, TimeSpan.FromSeconds(10)))
{
try
{
o = CacheSerializer.Deserialize<T>(redis.StringGet(cacheKeyName));
if (o == null)
{
o = func();
redis.StringSet(cacheKeyName, CacheSerializer.Serialize(o),
TimeSpan.FromSeconds(cacheTimeOutSeconds));
}
redis.LockRelease(lockKey, Environment.MachineName);
return o;
}
finally
{
redis.LockRelease(lockKey, Environment.MachineName);
}
}
return o;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将connectionMultiplexer保留在静态变量中,而不是为每个get / set创建它。这样一来,与Redis的连接就会一直保持打开状态,从而可以更快地进行操作。
更新:请看看StackExchange.Redis的基本用法:https : //github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Basics.md
“请注意,ConnectionMultiplexer实现了IDisposable,可以在不再需要时进行处理,但是我故意不显示使用语句的用法,因为您很少希望短暂使用ConnectionMultiplexer,因为这种想法是重用此对象, 。 “
它对我来说很好用,保持与Azure Redis的单一连接(有时创建2个连接,但这是设计使然)。希望对您有帮助。
| 归档时间: |
|
| 查看次数: |
2680 次 |
| 最近记录: |