StackExchange.Redis的
Basic 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会在后台自动重试.
原文地址:https://www.jb51.cc/csharp/96945.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。