연결이 끊긴 멀티플렉서를 만들기 위해 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
'programing' 카테고리의 다른 글
스크립트 파일의 시작 부분에 #!/bin/bash를 입력해야 하는 이유는 무엇입니까? (0) | 2023.05.07 |
---|---|
WPF 탭 컨트롤에서 탭 항목을 프로그래밍 방식으로 선택하는 방법 (0) | 2023.05.07 |
Bash 셸 스크립트에 디렉토리가 있는지 확인하려면 어떻게 해야 합니까? (0) | 2023.05.02 |
XCode 명령줄 도구가 설치되어 있는지 확인하는 방법은 무엇입니까? (0) | 2023.05.02 |
제가 언제 수업 대신 구조체를 사용해야 합니까? (0) | 2023.05.02 |