본문 바로가기

Project

Redis Setting에 대한 궁금증

// 직접 연결 + 직렬화 미설정
@Bean
public LettuceConnectionFactory redisConnectionFactory() {
    return new LettuceConnectionFactory();
}

@Bean
public RedisTemplate<String, String> redisTemplate() {
    RedisTemplate<String, String> template = new RedisTemplate<>();
    template.setConnectionFactory(redisConnectionFactory());
    return template;
}

 

// 파라미터 연결 + 직렬화 설정
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
    redisTemplate.setConnectionFactory(connectionFactory);
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.setValueSerializer(new StringRedisSerializer());
    return redisTemplate;
}

ConnectionFactory 직접 연결 vs Parameter로 연결

  • 직접 연결
    • LettuceConnectionFactory를 직접 생성
      -> 장점 : 명확한 Connection Factory 생성
      -> 단점 : 유연성 부족
  • Parameter 연결
    • 다른 Bean으로 등록된 RedisConnectionFactory를 사용
      -> 장점 : 유연성, 확장성 및 재사용성
      -> 단점 : 초기 설정의 복잡성 증가

Serializer

  • 미설정
    • JdkSerializationRedisSerializer를 사용 -> 데이터가 직렬화된 바이너리 형태로 저장
    • 사람이 데이터를 직접 확인하거나 디버깅할 때 어려움
  • 지정설정

    Serializer 장점 단점 추천 & 사용 시점
    JdkSerializationRedis
    Serializer
    모든 Java 객체 지원.
    단순하고 범용적임.
    데이터가 사람이 읽기 어려움
    클래스 변경 시 호환성 문제 발생.
    기본 직렬화 or
    간단한 데이터 저장.
    StringRedis
    Serializer
    읽기 쉽고 간단한
    문자열 데이터 저장에 적합.
    객체를 저장할 수 없음. 문자열 데이터
    (Key-Value 캐싱).
    Jackson2JsonRedis
    Serializer
    사람이 읽기 쉬운 JSON 형식.
    다양한 언어와 시스템에서 호환성 높음.
    클래스 변경 시 역직렬화 문제 발생 가능. 객체 데이터를
    JSON으로 저장.
    GenericJackson2JsonRedis
    Serializer
    타입 정보 포함으로
    역직렬화가 더 유연.
    JSON 크기가 다소 커질 수 있음. 다형성 객체 저장 및
    JSON 형식 필요 시.
    Kryo
    Serializer
    고성능, 메모리 효율성 높음. 추가 라이브러리 필요, 설정이 복잡할 수 있음. 고성능이 필요한 대규모 객체 데이터 처리.