web-dev-qa-db-ja.com

redisサーバーに接続できませんでした。切断されたマルチプレクサを作成するには

Azure redisキャッシュに接続する次のコードがあります。

   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日に1回または2回、この例外が発生します。

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

問題は、キャッシュ接続が失敗した場合に、このコードをリファクタリングしてデータベースに移動する方法です。

28
Luis Valencia

表示されるエラーは通常、接続文字列にabortConnect = falseが設定されていないことを示しています。 abortConnectのデフォルト値はtrueであり、これによりStackExchange.Redisは、特定の条件下でサーバーに自動的に再接続しません。接続文字列にabortConnect = falseを設定して、SE.Redisネットワークブリップが発生すると、バックグラウンドで自動再接続します。

49
JonCole

この問題に直面する他のコードに飛び込む初心者向け:

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

古いコードベースを維持している場合、「redisサーバーに接続できませんでした。切断されたマルチプレクサを作成するには、AbortOnConnectFailを無効にします。PINGでUnableToResolvePhysicalConnection」を実行します。

より新しいnugetパッケージにアップグレードしても、エラーは引き続き表示されますが、「クライアントとサーバーは共通のアルゴリズムを持たないため、通信できません」というエラー情報がさらに表示されます。

上記のレジストリキーを適用したら here 大丈夫でした。そのようなグローバルな変更を行いたくない人のために、設定に [〜#〜] pr [〜#〜] があったと思います。

1
JasonCoder

この問題は新しいリリースであるバージョン1.2.6で解決されました- Here で見ることができます

1
Roger Gusmao

また、エラーメッセージの最後の部分にも注意を払う必要があります。これは、接続が失敗した理由に関する非常に有用な詳細を提供しているように見えるためです。

あなたの場合:

Redisサーバーに接続できませんでした。切断されたマルチプレクサを作成するには、AbortOnConnectFailを無効にします。 PINGのUnableToResolvePhysicalConnection

私の場合:

Redisサーバーに接続できませんでした。切断されたマルチプレクサを作成するには、AbortOnConnectFailを無効にします。 タイムアウト

0
Zé Carlos