wake-up-neo.com

Es konnte keine Verbindung zu den Redis-Servern hergestellt werden. einen getrennten Multiplexer erstellen

Ich habe den folgenden Code, um eine Verbindung zum Azure-Redis-Cache herzustellen.

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

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

Und ich benutze es so

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

Ein oder zweimal pro Tag bekomme ich jedoch diese Ausnahme:

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

Die Frage ist, wie kann ich diesen Code umgestalten, um in die Datenbank zu gelangen, falls die Cache-Verbindung fehlschlägt?

24
Luis Valencia

Der Fehler, den Sie erhalten, ist normalerweise ein Zeichen, dass Sie abortConnect = false in Ihrer Verbindungszeichenfolge nicht festgelegt haben. Der Standardwert für abortConnect lautet true. Dies bedeutet, dass StackExchange.Redis unter bestimmten Bedingungen nicht automatisch eine Verbindung zum Server herstellt. Es wird dringend empfohlen, dass Sie abortConnect = false in Ihrer Verbindungszeichenfolge festlegen, damit SE.Redis im Hintergrund automatisch wiederhergestellt wird, wenn ein Netzwerk-Blip auftritt.

42
JonCole

für Anfänger, die in den Code anderer tauchen und sich diesem Problem stellen:

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

Bei älteren Codebasen kann Folgendes auftreten: "Es konnte keine Verbindung zu den Redis-Servern hergestellt werden. Deaktivieren Sie AbortOnConnectFail, um einen getrennten Multiplexer zu erstellen. UnableToResolvePhysicalConnection on PING".

Nach dem Upgrade auf ein neueres Nuget-Paket war der Fehler immer noch vorhanden, es wurden jedoch weitere Fehlerinformationen angezeigt: "Der Client und der Server können nicht kommunizieren, da sie keinen gemeinsamen Algorithmus besitzen".

Nachdem ich die genannten Registrierungsschlüssel angewendet hatte hier war ich in Ordnung. Für diejenigen, die diese globale Veränderung nicht vornehmen möchten, gibt es meines Erachtens ein PR für eine Einstellung.

1
JasonCoder

Dieses Problem wurde in einer neuen Version behoben, der Version 1.2.6 - sehen Sie in hier

1
Roger Gusmao

Sie sollten auch auf den letzten Teil Ihrer Fehlermeldung achten, da sie sehr nützliche Details zu den Gründen für den Verbindungsfehler enthält. 

In Ihrem Fall:

Es konnte keine Verbindung zu den Redis-Servern hergestellt werden. Um einen getrennten Multiplexer zu erstellen, deaktivieren Sie AbortOnConnectFail. UnableToResolvePhysicalConnection für PING

Mein Fall:

Es konnte keine Verbindung zu den Redis-Servern hergestellt werden. Um einen getrennten Multiplexer zu erstellen, deaktivieren Sie AbortOnConnectFail. Auszeit

0
Zé Carlos