우주먼지
article thumbnail

💡 ElasticCache for Redis

Redis를 캐싱서버로 사용하는 이유
서버에 Refresh Token을 저장해야하는데 영구적으로 필요한 데이터도 아니고, 리소스 절약하기 위해 사용

구현체
Lettuce, Jedis 중 Lettuce 사용

Lecttue - 비동기 처리, 성능up, 추가적인 의존성 필요X, 별도의 설정없이 Redis에 명령 가능
Jedis - Deprecated된 방법, 별도의 추가 의전송필요, None Thread-Safe

💡 사전 준비

 

Elasticache Redis Cluster 생성

AWS ElasticCache Redis Cluster 생성

 

EC2 Instance에 gcc설치후 redis-cli 컴파일

 

시스템 환경변수에 Redis Primary Node의 Endpoint를 넣고 application.yml에서 가져오기

 

Spring Boot Project 내에 의존성 추가 & application.yml에 redis 정보 등록

implementation 'org.springframework.boot:spring-boot-starter-data-redis'

 

RedisConfig

/* Redis Template를 이용한 방식 */

@Configuration
@EnableRedisRepositories
@RequiredArgsConstructor
public class RedisConfig {

    @Value("${spring.redis.host}")
    private String redisHost;

    @Value("${spring.redis.port}")
    private int redisPort;

    private final RedisProperties redisProperties;

    /* RedisConnectionFactory 인터페이스를 통해 LettuceConnectionFactory 반환 */

    @Bean
    public RedisConnectionFactory factory() {
        RedisClusterConfiguration configuration = new RedisClusterConfiguration();
        configuration.clusterNode(redisHost, redisPort);

        LettuceClientConfiguration clientConfiguration = LettuceClientConfiguration.builder()
                .clientOptions(ClientOptions.builder()
                        .socketOptions(SocketOptions.builder()
                                .connectTimeout(Duration.ofMillis(redisProperties.getTimeout())).build())
                        .build())
                .commandTimeout(Duration.ofSeconds(redisProperties.getTimeout())).build();

        return new LettuceConnectionFactory(configuration, clientConfiguration);
    }

    @Bean
    public RedisTemplate<String, String> template() {
        /* RedisTemplate를 받아와 set, get, delete 사용 */
        RedisTemplate<String, String> template = new RedisTemplate<>();

        /* Key & Value Serializer, Factory 설정 */
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());
        template.setConnectionFactory(factory());

        return template;
    }
}

💡 Redis in Local Server

 

Local Server에서의 연동

  • Docker Compose Yml 작성후 Redis Container 생성 & 실행

  • 방화벽  포트 & 서비스 오픈

 

IntelliJ 내의 Docker 서비스와 로컬 개인서버 연결
연결 성공

 

  • Spring Boot Project 내에 의존성 추가 & application.yml에 redis 정보 등록
implementation 'org.springframework.boot:spring-boot-starter-data-redis'

Redis 서버 IP,Port 등록
Redis 서버와 정상 통신 가능

 

profile

우주먼지

@o귤o

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그