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

回到顶部