레디스 클러스터에서 Replica read from하는 방법에 대해 알아보자

application.properties

spring.redis.cluster.nodes=localhost:6301,localhost:6302,localhost:6300,localhost:6400,localhost:6401,localhost:6402

Redis Configuration

@Value("${spring.redis.cluster.nodes}")
    private List<String> clusterNodes;

    @Bean // redis cluster configuration
    public RedisConnectionFactory redisConnectionFactory(){
        RedisClusterConfiguration clusterConfiguration = new RedisClusterConfiguration(clusterNodes);
        LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
                **.readFrom(ReadFrom.REPLICA_PREFERRED)**
                .commandTimeout(Duration.ofSeconds(10))
                .build();
        return new LettuceConnectionFactory(clusterConfiguration,clientConfig);
    }

    @Bean
    public RedisTemplate<?,?> redisTemplate(){
        // byte값을 객체 직렬화
        RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory());
        return redisTemplate;
    }

Spring Boot 2.0이상부터는 레디스 인터페이스로 Lettuce Client를 사용한다.

Lettuce는 비동기 처리를 지원하며, slave Read를 지원한다.

위처럼 스프링 Configuration에서 LettuceClientConfiguration을 스프링빈으로 등록되는RedisConnectionFactory에 주입해주면 Slave를 우선으로 하여 데이터를 읽어온다.

다만, Slave가 Down된 경우 Master로부터 읽어온다.

물론 당연하게도, Master가 죽은 경우 slave로 부터 데이터를 조회해오되, 기존 마스터노드다운 시 slave노드가 마스터 노드로 전환된다.

Untitled