无法连接到redis服务器; 创建断开连接的多路复用器

我有以下代码连接到azure redis缓存。

public class CacheConnectionHelper { private static Lazy lazyConnection = new Lazy(() => { return ConnectionMultiplexer.Connect(SettingsHelper.AzureRedisCache); }); public static ConnectionMultiplexer Connection { get { return lazyConnection.Value; } } } 

我这样用它

 public static List GetModules() { IDatabase cache = CacheConnectionHelper.Connection.GetDatabase(); List listOfModules = new List(); listOfModules = (List)cache.Get("ApplicationModules"); if (listOfModules == null) { listOfModules = dbApp.Modulos.ToList(); cache.Set("ApplicationModules", listOfModules, TimeSpan.FromMinutes(SettingsHelper.CacheModuleNames)); return listOfModules; } else { return listOfModules; } } 

但是每天1或2次我得到这个例外:

  Additional information: It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. UnableToResolvePhysicalConnection on PING 

问题是如何在缓存连接失败的情况下重构此代码以转到数据库?

您获得的错误通常表明您未在连接字符串中设置abortConnect = falseabortConnect的默认值为true ,这使得StackExchange.Redis在某些情况下不会自动重新连接到服务器。 我们强烈建议您在连接字符串中设置abortConnect = false ,以便SE.Redis在后台发生网络故障时自动重新连接。

对于潜入其他代码的初学者来说,面对这个问题:

 if (RedisConn == null) { ConfigurationOptions option = new ConfigurationOptions { AbortOnConnectFail = false, EndPoints = { redisEndpoint } }; RedisConn = ConnectionMultiplexer.Connect(option); } 

这个问题在新版本1.2.6中得到了解决 – 你可以在这里看到

您还应该注意错误消息的最后一部分,因为它似乎提供了有关连接失败原因的非常有用的详细信息。

在你的情况下:

无法连接到redis服务器; 要创建断开连接的多路复用器,请禁用AbortOnConnectFail。 PING上的UnableToResolvePhysicalConnection

我的情况:

无法连接到redis服务器; 要创建断开连接的多路复用器,请禁用AbortOnConnectFail。 超时