StackExchange.Redis的“ 基本用法”文档解释说,该方法ConnectionMultiplexer是长期存在的,有望重新使用。
ConnectionMultiplexer
但是,当与服务器的连接断开时该怎么办?是否ConnectionMultiplexer自动重新连接,或者是否有必要像此答案一样编写代码(引用该答案):
if (RedisConnection == null || !RedisConnection.IsConnected) { RedisConnection = ConnectionMultiplexer.Connect(...); } RedisCacheDb = RedisConnection.GetDatabase();
上面的代码是处理断开连接恢复的好方法,还是实际上会导致多个ConnectionMultiplexer实例?同样,该IsConnected属性应如何解释?
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; } }
一些要点: