[Redis] 스프링4.0 xml 설정파일을 사용한 레디스 센티널 연결

    728x90
    반응형

    Gradle 설정

    dependencies {
    	implementation group: 'com.google.guava', name: 'guava', version: '19.0'
    	implementation group: 'io.lettuce', name: 'lettuce-core', version: '4.5.0.RELEASE'
    	implementation group: 'org.latencyutils', name: 'LatencyUtils', version: '2.0.3'
    	implementation group: 'io.netty', name: 'netty-all', version: '4.1.68.Final'
    	implementation group: 'io.reactivex.rxjava3', name: 'rxjava', version: '1.3.4'
    	implementation group: 'org.springframework.data', name: 'spring-data-commons', version: '1.13.23.RELEASE'
    	Implementation group: 'org.springframework.data', name: 'spring-data-keyvalue', version: '1.2.23.RELEASE'
    	implementation group: 'org.springframework.data', name: 'spring-data-redis', version: '1.8.23.RELEASE'
    	implementation group: 'org.springframework.session', name: 'spring-session-data-redis', version: '1.3.1.RELEASE'
    	implementation group: 'org.springframework.session', name: 'spring-session', version: '1.3.1.RELEASE'
    	implementation group: 'com.google.guava', name: 'failureaccess', version: '1.0.1'
    }

     

     

    XML(redis-context.xml) 설정

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <context:annotation-config/>
        <!-- 세션설정 -->
        <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
            <!-- 세션 타임아웃 시간(초 단위) -->
            <property name="maxInactiveIntervalInSeconds" value="3600" />
        </bean>
    
        <!-- 레디스 연결설정(Lettuce 사용) -->
        <bean id="lettuceFactory" class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory">
            <constructor-arg>
                <ref bean="sentinelConfiguration" />
            </constructor-arg>
    
            <!-- 레디스 연결정보(DB Index, 비밀번호) -->
            <property name="database" value="0" />
            <property name="password" value="마스터노드 비밀번호" />
        </bean>
    
        <!-- 센티널 연결정보(마스터 노드명, 센티널 호스트와 포트정보) -->
        <bean id="sentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
            <constructor-arg value="마스터 노드명" />
            <constructor-arg>
                <set>
                    <!-- 센티널 IP와 포트는 ,로 구분 -->
                    <value>1번IP:포트,2번IP:포트,3번IP:포트,...</value>
                </set>
            </constructor-arg>
        </bean>
    
        <!-- 레디스 템플릿 빈 등록 -->
        <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
            p:connection-factory-ref="lettuceFactory" />
    </beans>

     

     

    주의사항

    1) jar의 버전이 서로 맞지 않으면 연결이 되지 않음. NoSuchMethodException, NoClassDefFoundError 등의 Exception이 발생

    2) 센티널의 IP와 포트를 작성할때는 "를 사용하지 않고 작성

    3) 연결이 완료되면 기존의 마스터로 지정되었던 노드를 내리고 Replica가 마스터가 되었는지 확인 필요

    728x90
    반응형

    댓글