ConnectionMultiplexer是如何处理掉线的?StackExchange.Redis的基本使用文档解释了ConnectionMultiplexer是长期存在的,预计会被重用。但是什么时候与服务器的连接断开了?ConnectionMultiplexer是否自动重新连接,或者是否有必要像这个答案(引用那个答案)那样编写代码:if(RedisConnection==null||!RedisConnection.IsConnected){RedisConnection=ConnectionMultiplexer.Connect(...);}RedisCacheDb=RedisConnection.GetDatabase();上面的代码是否适合处理断开连接的恢复,或者它实际上会导致多个ConnectionMultiplexer实例吗?同样,应该如何解释IsConnected属性?[旁白:我认为上面的代码是一种非常糟糕的惰性初始化形式,尤其是在多线程环境中——请参阅JonSkeet关于单例的文章]。以下是AzureRedis缓存团队推荐的模式:privatestaticLazylazyConnection=newLazy(()=>{returnConnectionMultiplexer.Connect("mycache.redis.cache.windows.net,abortConnect=false,ssl=true,密码=...");});publicstaticConnectionMultiplexerConnection{get{returnlazyConnection.Value;一些要点:是的,你需要这种类型的验证来修复断开的连接。还应考虑一些线程安全性。我通常是这样做的:privatestaticConnectionMultiplexer_redis;privatestaticreadonlyObject_multiplexerLock=newObject();privatevoidConnectRedis(){try{_redis=ConnectionMultiplexer.Connect("...");}catch(Exceptionex){//异常处理在这里}}privateConnectionMultiplexerRedisMultiplexer{get{lock(_multiplexerLock){if(_redis==null||!_redis.IsConnected){ConnectRedis();}返回_redis;然后我在需要调用Redis端点的地方使用RedisMultiplexer属性。我通常不存储GetDatabase()调用的结果,因为文档说这是一个非常轻量级的调用。以上是C#学习教程:ConnectionMultiplexer如何处理断开连接?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
