2012-11-26 5 views
1

연결이 끊어지면 Redis 서버에 다시 연결하려고합니다.hiredis에 다시 연결

redisAsyncConnect를 사용하고 있으며 연결 해제시 콜백을 설정했습니다. 콜백에서 나는 프로그램 시작시 연결을 설정하는 데 사용하는 명령과 동일한 명령으로 다시 연결하려고 시도하지만 작동하지 않습니다. 다시 연결할 수 없습니다.

누구든지 나를 도와 줄 수 있습니까?

+0

당신은 redis Ruby gem 코드를보고 그것이하는 것을 볼 수 있습니다. 보석이 있으면 연결이 끊어지면 다음 명령이 연결을 안정적으로 다시 설정하는 것처럼 보입니다. – Gene

답변

2

비동기 적으로 Redis (재) 연결을 관리하는 것은 이벤트 루프가 사용될 때 약간 까다 롭습니다.

다음은 단절 이벤트에 복원력이있는 Redis 인스턴스 목록에 연결하는 작은 zset 폴링 데몬을 구현하는 예입니다. ae 이벤트 루프가 사용됩니다 (Redis 자체에서 사용되는 루프입니다).

http://gist.github.com/4149768

검사는 다음과 같은 기능 :

  • connectCallback
  • disconnectCallback
  • checkConnections

주요 daemo을 reconnectIfNeeded n 루프는 연결이 가능할 때만 활동을 수행합니다. 초당 1 회, 두 번째 시간 콜백은 일부 연결을 다시 설정해야하는지 확인합니다. 우리는이 메커니즘이 매우 안정적이라는 것을 발견했습니다.

참고 : 간결성을 위해이 예에서는 오류 관리가 일반적이지 않습니다. 실제 생산 코드는 오류를보다 우아한 방법으로 관리해야합니다.

여러 개의 비동기 연결을 처리 할 때 까다로운 점 중 하나는 해당 콜백의 매개 변수로 전달되는 사용자 정의 컨텍스트 데이터가 없다는 점입니다. 단절 이벤트 이후에 연결과 관련된 데이터를 정리하는 것은 약간 어려울 수 있습니다.

+0

이 디디에를 보내 주셔서 감사합니다. 매우 비슷한 것을 만들었지 만 콜백을 이벤트 루프에 다시 연결하지 않았습니다. 다른 차이점이 있기 때문에 그것이 문제인지는 모르겠지만 예제가 도움이됩니다. – gkres