others - C# 无法连接到 redis server来创建断开的多路复用器

我有下面的代码来连接azure redis缓存。


 public class CacheConnectionHelper


 {


 private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>


 {


 return ConnectionMultiplexer.Connect(SettingsHelper.AzureRedisCache);


 });



 public static ConnectionMultiplexer Connection


 {


 get


 {


 return lazyConnection.Value;


 }


 }


 }



我用这种方法


public static List<Models.Module> GetModules()


 {


 IDatabase cache = CacheConnectionHelper.Connection.GetDatabase();


 List<Models.Module> listOfModules = new List<Models.Module>();


 listOfModules = (List<Models.Module>)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 = false。abortConnect的默认值为true,这使得StackExchange.Redis在某些条件下不会自动重新连接到服务器,强烈建议您在连接字符串中设置abortConnect = false,如果发生网络故障,SE.Redis将在后台自动重新连接。


if (RedisConn == null)


 { 


 ConfigurationOptions option = new ConfigurationOptions


 {


 AbortOnConnectFail = false,


 EndPoints = { redisEndpoint }


 };


 RedisConn = ConnectionMultiplexer.Connect(option);


 }



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

根据你的情况:

无法连接到 redis server(s); 以创建断开连接的多路复用器,禁用 AbortOnConnectFail 。 PING UnableToResolvePhysicalConnection

我的情况是:

无法连接到 redis server(s); 以创建断开连接的多路复用器,禁用 AbortOnConnectFail 。 超时

...