web-dev-qa-db-fra.com

Il n’était pas possible de se connecter au (x) serveur (s) redis; créer un multiplexeur déconnecté

J'ai le morceau de code suivant pour me connecter au cache Redis Azure.

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

        public static ConnectionMultiplexer Connection
        {
            get
            {
                return lazyConnection.Value;
            }
        }
    }

Et je l'utilise de cette façon

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;
            }
        }

Cependant, 1 ou 2 fois par jour, je reçois cette exception:

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

La question est de savoir comment puis-je refactoriser ce code pour accéder à la base de données en cas d'échec de la connexion au cache?

24
Luis Valencia

L'erreur que vous obtenez est généralement le signe que vous n'avez pas défini abortConnect = false dans votre chaîne de connexion. La valeur par défaut de abortConnect est true, ce qui fait que StackExchange.Redis ne se reconnectera pas automatiquement au serveur dans certaines conditions. Nous vous recommandons vivement de définir abortConnect = false dans votre chaîne de connexion afin que SE.Redis se reconnecte automatiquement en arrière-plan en cas de blocage du réseau.

42
JonCole

pour les débutants qui plongent dans le code d’autre face à ce problème:

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

Ce problème a été résolu dans une nouvelle version, la version 1.2.6 - vous pouvez voir dans Ici

1
Roger Gusmao

Vous devez également faire attention à la dernière partie de votre message d'erreur, car il semble fournir des détails très utiles sur la raison pour laquelle la connexion a échoué. 

Dans ton cas:

Il n’était pas possible de se connecter au (x) serveur (s) redis; pour créer un multiplexeur déconnecté, désactivez AbortOnConnectFail. UnableToResolvePhysicalConnection on PING

Mon cas:

Il n’était pas possible de se connecter au (x) serveur (s) redis; pour créer un multiplexeur déconnecté, désactivez AbortOnConnectFail. Temps libre

0
Zé Carlos