Tengo el siguiente fragmento de código para conectarme a Azure Redis Caché.
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 al día recibo esta excepción:
Información adicional: No fue posible conectarse a los servidores redis; para crear un multiplexor desconectado, deshabilite AbortOnConnectFail. UnableToResolvePhysicalConnection en 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 recibe suele ser una señal de que no ha establecido abortConnect=false en su cadena de conexión. El valor predeterminado para abortConnect es true , lo que hace que StackExchange.Redis no se vuelva a conectar al servidor automáticamente bajo algunas condiciones. Recomendamos enfáticamente que configure abortConnect=false en su cadena de conexión para que SE.Redis se vuelva a conectar automáticamente en segundo plano si ocurre una falla en la red.
para los principiantes que se sumergen en el código de otros y se enfrentan a este problema:
if (RedisConn == null) { ConfigurationOptions option = new ConfigurationOptions { AbortOnConnectFail = false, EndPoints = { redisEndpoint } }; RedisConn = ConnectionMultiplexer.Connect(option); }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 que falló la conexión.
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