ConnectionMultiplexer如何处理断开连接?
StackExchange.Redis的“
基本用法”文档解释说,该方法ConnectionMultiplexer
是长期存在的,有望重新使用。
但是,当与服务器的连接断开时该怎么办?是否ConnectionMultiplexer
自动重新连接,或者是否有必要像此答案一样编写代码(引用该答案):
if (RedisConnection == null || !RedisConnection.IsConnected) {
RedisConnection = ConnectionMultiplexer.Connect(...);
}
RedisCacheDb = RedisConnection.GetDatabase();
上面的代码是处理断开连接恢复的好方法,还是实际上会导致多个ConnectionMultiplexer
实例?同样,该IsConnected
属性应如何解释?
[另外:我相信上面的代码是惰性初始化的一种非常糟糕的形式,尤其是在多线程环境中-请参阅 Jon
Skeet在Singletons上的文章
]。
回答:
这是Azure Redis缓存团队建议的模式:
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() => { return ConnectionMultiplexer.Connect("mycache.redis.cache.windows.net,abortConnect=false,ssl=true,password=...");
});
public static ConnectionMultiplexer Connection {
get {
return lazyConnection.Value;
}
}
一些要点:
- 它使用Lazy
处理线程安全的初始化 - 它设置为“ abortConnect = false”,这意味着如果初始连接尝试失败,则ConnectionMultiplexer将在后台静默重试,而不是引发异常。
- 它并 检查IsConnected财产,因为如果连接中断ConnectionMultiplexer会在后台自动重试。
以上是 ConnectionMultiplexer如何处理断开连接? 的全部内容, 来源链接: utcz.com/qa/433536.html