c# – ConnectionMultiplexer如何处理断开连接?

StackExchange.RedisBasic Usage文档解释说,ConnectionMultiplexer是长期存在的,预计将被重用.

但是当与服务器的连接断开时呢? ConnectionMultiplexer会自动重新连接,还是需要按照this answer(引用答案)编写代码

if (RedisConnection == null || !RedisConnection.IsConnected)
        {
            RedisConnection = ConnectionMultiplexer.Connect(...);
        }
        RedisCacheDb = RedisConnection.GetDatabase();

上述代码是否有助于从断开连接中处理恢复,还是会实际产生多个ConnectionMultiplexer实例?同样的,IsConnected属性应如何解释?

[旁白:我相信上面的代码一个非常糟糕的懒惰初始化形式,特别是在多线程环境中 – 参见Jon Skeet’s article on Singletons].

解决方法

这是 pattern recommended by the Azure Redis Cache team
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< T>处理线程安全初始化>它设置“abortConnect = false”,这意味着如果初始连接尝试失败,ConnectionMultiplexer将在后台重试而不是抛出异常.>它不检查IsConnected属性,因为如果连接被删除,ConnectionMultiplexer会在后台自动重试.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...