c# - implement - No fue posible conectarse a los servidores redis; para crear un multiplexor desconectado
redis cache example (4)
Tengo la siguiente pieza de código para conectarme a la memoria caché de redis azul.
public class CacheConnectionHelper
{
private static Lazy<ConnectionMultiplexer> lazyConnection = new Lazy<ConnectionMultiplexer>(() =>
{
return ConnectionMultiplexer.Connect(SettingsHelper.AzureRedisCache);
});
public static ConnectionMultiplexer Connection
{
get
{
return lazyConnection.Value;
}
}
}
Y lo uso de esta manera
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;
}
}
Sin embargo, 1 o 2 veces por día obtengo esta excepción:
Additional information: It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. UnableToResolvePhysicalConnection on PING
La pregunta es ¿cómo puedo refactorizar este código para ir a la base de datos en caso de que falle la conexión de caché?
El error que está recibiendo suele ser una señal de que no ha configurado abortConnect = false en su cadena de conexión. El valor predeterminado para abortConnect es verdadero , lo que hace que StackExchange.Redis no se vuelva a conectar al servidor automáticamente bajo ciertas condiciones. Le recomendamos encarecidamente que configure abortConnect = false en su cadena de conexión para que SE.Redis se reconecte automáticamente en el fondo si se produce un error de red.
También debe prestar atención a la última parte de su mensaje de error, ya que parece proporcionar detalles muy útiles sobre la razón por la cual la conexión ha fallado.
En tu caso:
No fue posible conectarse a los servidores redis; para crear un multiplexor desconectado, deshabilite AbortOnConnectFail. UnableToResolvePhysicalConnection en PING
Mi caso:
No fue posible conectarse a los servidores redis; para crear un multiplexor desconectado, deshabilite AbortOnConnectFail. Se acabó el tiempo
para los principiantes que bucean en el código de otros y enfrentan este problema:
if (RedisConn == null)
{
ConfigurationOptions option = new ConfigurationOptions
{
AbortOnConnectFail = false,
EndPoints = { redisEndpoint }
};
RedisConn = ConnectionMultiplexer.Connect(option);
}
Este problema fue resuelto en una nueva versión, la versión 1.2.6 - se puede ver en la descripción del enlace de entrar aquí