spring-data redis의 RedisTemplate에서 JedisSentinelPool 주입하여 사용하기

JedisSentinelPool

장애 극복을 위해 일반적으로 마스터와 슬레이브 형태로 레디스 서버를 구성 하며

마스터 서버가 죽었을 경우, 슬레이브를 마스터로 승격화 시켜 서비스를 지속시킨다.

레디스는 장애 극복을 자동으로 하기 위해 Sentinel이라는 모니터링 시스템을 제공한다.


레디스 디비에 연결하는 프로그램 입장에서는 레디스 디비가 장애 극복이 일어나면, 

마스터의 주소가 변경되기 때문에, 마스터의 주소를 알아낼 방법이 필요하다.


JedisSentinelPool은 위 기능을 구현한 클래스이다.


spring-data redis을 사용한다면 RedisTemplate을 이용하게 될텐데,

현재 버전(1.2.0.RELEASE)에서는 JedisSentinelPool을 주입할 수 없다.


다행히, spring-data redis 클래스 소스를 제공하고 있으며,

JedisSentinelPool을 주입할 수 있도록 약간만 수정하면 쉽게 사용할 수 있었다.


JedisSentinelPool의 원본 소스를 복사한 후 MyJedisSentinelPool을 만들고, setSentinelPool 함수를 추가해 주입할 수 있도록 했다.

root-context.xml에서 JedisSentinelPool을 주입시킨 코드


redis version 2.8.7

redis master config

redis slave config

redis sentinel config