programing

연결이 끊긴 멀티플렉서를 만들기 위해 redis 서버에 연결할 수 없습니다.

bestprogram 2023. 5. 7. 12:01

연결이 끊긴 멀티플렉서를 만들기 위해 redis 서버에 연결할 수 없습니다.

zure rediscache에 연결할 다음 코드가 있습니다.

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~2번은 이 예외가 발생합니다.

추가 정보:redis 서버에 연결할 수 없습니다. 연결이 끊긴 멀티플렉서를 만들려면 AbortOnConnectFail을 사용하지 않도록 설정하십시오.PING에서 물리적 연결을 확인할 수 없음

문제는 캐시 연결이 실패할 경우 데이터베이스로 이동하기 위해 이 코드를 어떻게 리팩터링할 수 있는가 하는 것입니다.

일반적으로 발생하는 오류는 연결 문자열에 abortConnect=false를 설정하지 않은 것입니다.abortConnect의 기본값은 true이며, 이 값은 StackExchange가 됩니다.일부 상황에서는 Redis가 서버에 자동으로 다시 연결되지 않습니다.SE가 되도록 연결 문자열에 abortConnect=false를 설정하는 것이 좋습니다.네트워크 블립이 발생하면 Redis가 백그라운드에서 자동으로 다시 연결됩니다.

다른 사람의 코드를 입력하는 초보자의 경우 다음과 같은 문제가 발생합니다.

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

오류 메시지의 마지막 부분에도 주의해야 합니다. 연결이 실패한 이유에 대한 매우 유용한 세부 정보를 제공하는 것 같습니다.

당신의 경우:

redis 서버에 연결할 수 없습니다. 연결이 끊긴 멀티플렉서를 만들려면 AbortOnConnectFail을 사용하지 않도록 설정하십시오.PING에서 물리적 연결을 확인할 수 없음

내 경우:

redis 서버에 연결할 수 없습니다. 연결이 끊긴 멀티플렉서를 만들려면 AbortOnConnectFail을 사용하지 않도록 설정하십시오.시간 초과

이전 코드베이스를 유지하는 사용자의 경우 "redis 서버에 연결할 수 없습니다. 연결되지 않은 멀티플렉서를 만들려면 AbortOnConnectFail을 사용하지 않도록 설정하십시오.PING에서 물리적 연결을 확인할 수 없음"

더 최근의 nugget 패키지로 업그레이드한 후에도 오류가 계속 발생했지만 "클라이언트와 서버가 공통 알고리즘을 가지고 있지 않기 때문에 통신할 수 없습니다."라는 오류 정보가 더 많이 표시되었습니다.

여기에 언급된 레지스트리 키를 적용하면 문제가 없습니다.세계적인 변화를 원하지 않는 사람들을 위해 저는 설정에 대한 PR이 있었다고 생각합니다.

다음을 변경하여 이 문제를 해결했습니다.

CacheSettings:ConnectionString=basketdb:6379

로.

CacheSettings__ConnectionString=basketdb:6379

도커-docker.dll.yml에 있습니다.

이 문제는 새 버전 1.2.6에서 해결되었습니다. 여기에서 확인할 수 있습니다.

연결 문자열을 localhost:6379에서 127.0.0.1:6379로 변경하여 수정했습니다.

저는 연결 문자열이 잘못되었습니다.stackexchange.redis 2.1.58에서 작업한 올바른 연결 문자열 세부 정보 추가

이런 식으로 사용하시면 됩니다.

  public class RedisService
    {
        private readonly string _host;
        private readonly int _port;
        private ConnectionMultiplexer _connectionMultiplexer;

        public RedisService(string host, int port)
        {
            _host = host;
            _port = port;
        }

        public void Connect() => _connectionMultiplexer = ConnectionMultiplexer.Connect($"{_host}:{_port}");
}

여기에 이미지 설명 입력

Redis가 이미 설정되어 있는지 확인합니다.각 OS에 대한 지침 링크는 다음과 같습니다.

Mac OS: https://gist.github.com/tomysmile/1b8a321e7c58499ef9f9441b2faa0aa8

Windows: https://dev.to/divshekhar/how-to-install-redis-on-windows-10-3e99

언급URL : https://stackoverflow.com/questions/30895507/it-was-not-possible-to-connect-to-the-redis-servers-to-create-a-disconnected