我有下面的代码连接到蔚蓝红色缓存。
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次这样的例外:
附加信息:无法连接到redis服务器;要创建断开连接的多路复用器,禁用AbortOnConnectFail。UnableToResolvePhysicalConnection on PING
问题是,如果缓存连接失败,我如何重构此代码以转到数据库?
发布于 2015-06-18 14:45:28
您所得到的错误通常是您尚未在连接字符串中设置abortConnect=false的一个标志。abortConnect的默认值为true,这使得StackExchange.Redis不会在某些条件下自动重新连接到服务器。我们强烈建议您在连接字符串中设置abortConnect=false,以便在出现网络闪点时,SE.Redis将在后台自动重新连接。
发布于 2017-05-01 05:18:09
对于那些钻研别人的代码的初学者来说,他们会面临这样的问题:
if (RedisConn == null)
{
ConfigurationOptions option = new ConfigurationOptions
{
AbortOnConnectFail = false,
EndPoints = { redisEndpoint }
};
RedisConn = ConnectionMultiplexer.Connect(option);
}发布于 2016-11-04 10:48:49
您还应该注意错误消息的最后一部分,因为它似乎提供了关于连接失败原因的非常有用的详细信息。
就你而言:
无法连接到redis服务器;要创建断开连接的多路复用器,禁用AbortOnConnectFail。UnableToResolvePhysicalConnection on PING
我的案子:
无法连接到redis服务器;要创建断开连接的多路复用器,禁用AbortOnConnectFail。超时
https://stackoverflow.com/questions/30895507
复制相似问题