본문 바로가기
레디스

레디스 클러스터를 활용한 데이터 관리와 스프링 부트 연동: 클러스터 구성, 노드 설정, 조회 적용 및 실습

by 플라퉁 2023. 6. 16.
728x90
반응형

 

 

 

 

 

 

 

이번엔 Redis Cluster 를 사용하여 데이터를 관리해 봅시다.

 

혹시나 Redis Cluster와 Redis Sentinel 두가지 방식에 대해 궁금하신 분들을 위해 비교글도 작성하였습니다.

 

https://rhgustmfrh.tistory.com/123

 

Redis Sentinel vs Redis Cluster: 고가용성과 확장성의 대결

안녕하세요 오늘은 Redis Sentinel과 Redis Cluster 이 두 가지 기술을 비교하여 어떤 상황에서 어떤 것을 선택해야 하는지 알아보려 합니다. 1. Redis Sentinel: Redis Sentinel은 고가용성(High Availability) 솔루션

rhgustmfrh.tistory.com

 

 

어쨌든 계속해서 Cluster 를 사용하는 이점은 다음과 같습니다.

 

 

하나의 서버에서 문제가 발생하더라도 다른 서버에서 실행중인 슬레이브 노드가 해당 데이터를 제공할 수 있어 가용성이 높아짐,  성능 및 확장성 향상을 위해 여러 노드에 데이터를 분산 저장함

 

 

바로 구성해 보죠

yml 설정입니다. 

 

spring:
  redis:
    lettuce:
      pool:
        max-active: 50
        max-idle: 50
        min-idle: 2
    cluster:
      nodes: 119.119.119.1:7000, 119.119.119.2:7000, 119.119.119.3:7000, 119.119.119.4:7000, 119.119.119.5:7000, 119.119.119.6:7000
      password:
      maxRedirects:

 

노드 구성:
- 마스터 노드1: 119.119.119.1:7000
- 슬레이브 노드1: 119.119.119.4:7000 (마스터 노드1의 슬레이브)

- 마스터 노드2: 119.119.119.2:7000
- 슬레이브 노드2: 119.119.119.5:7000 (마스터 노드2의 슬레이브)

- 마스터 노드3: 119.119.119.3:7000
- 슬레이브 노드3: 119.119.119.6:7000 (마스터 노드3의 슬레이브)

 

이렇게 노드가 구성됩니다.

 

 

 

config 입니다.

 

@Getter
      @Setter
      @Slf4j
      @Configuration
      @ConfigurationProperties("spring.redis.cluster")
      public class RedisClusterConfig {
          private List<String> nodes;
          private String password;
      //    private int maxRedirects;
      
          @Bean
          public RedisConnectionFactory redisConnectionFactory() {
              RedisClusterConfiguration configuration = new RedisClusterConfiguration(nodes);
              if (password != null) {
                  configuration.setPassword(RedisPassword.of(password));
              }
      //        configuration.setMaxRedirects(maxRedirects);
              LettuceConnectionFactory factory = new LettuceConnectionFactory(configuration);
              return factory;
          }
      
      
          @Bean
          public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
              RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
              redisTemplate.setKeySerializer(new StringRedisSerializer());
              redisTemplate.setValueSerializer(new StringRedisSerializer());
              redisTemplate.setHashKeySerializer(new StringRedisSerializer());
              redisTemplate.setHashValueSerializer(new StringRedisSerializer());
              redisTemplate.setConnectionFactory(redisConnectionFactory);
              redisTemplate.afterPropertiesSet();
              return redisTemplate;
          }
      }

 

 

 

 

 

 

 

레파지토리입니다.

 

@Slf4j
@Repository
public class RedisRepository {
    private final RedisTemplate<String, Object> redisTemplate;
    private final HashOperations<String, String, String> hashOperations;

    public RedisRepository(RedisTemplate<String, Object> redisTemplate) {
        this.redisTemplate = redisTemplate;
        this.hashOperations = redisTemplate.opsForHash();
    }

    public String searchRedis(String name) {
        String searchName1 = "a" + name.trim();
        String searchName2 = "b" + name.trim();
        String resultCode1 = "1에서 찾았다";
        String resultCode2 = "2에서 찾았다";
        String resultCode3 = "그런거 없다";

        Boolean step1 = redisTemplate.hasKey(searchName1);
        Boolean step2 = redisTemplate.hasKey(searchName2);
        if(step1){
            return resultCode1;
        }else{
            if(step2){
                return resultCode2;
            }
            else{
                return resultCode3;
            }
        }
    }
}

 일부러 전과 동일한 방식의 로직을 구현하였습니다.

 

레디스를 싱글로 구성하는것과 다르게 

 

클러스터 구성하면 DB0 밖에 사용하지 못합니다. 따라서 

 

위에서 조회한것처럼 데이터 앞에 특정한 값을 넣어 보관 하고 있으면 해당 데이터를 

구분하여 조회 할 수 있습니다.

 

물론 다른 방법이 있겠습니다만 저는 이런 방법을 써봤습니다.

 

레디스 써보니 빠르고 좋은것 같습니다 강추 드립니다.

 

감사합니다~~!

 

 

 

 

이미지 출처 : https://architecturenotes.co/redis/

 

Redis Explained

A deep technical dive into all things Redis. Covering various Redis topologies, data persistence and process forking.

architecturenotes.co

 

 

 

 

728x90
반응형

댓글