모르는게 많은 개발자

[NoSql] SpringBoot, Redis 연동 예제 본문

알아가는 개발

[NoSql] SpringBoot, Redis 연동 예제

Awdsd 2020. 7. 29. 00:20
반응형

이번 포스팅에서는 SpringBoot와 Redis를 연동하여 사용하는 간단 예제를 알아보려한다.


1. 준비

Redis 서버 실행

기본적으로 Redis가 설치되있다고 가정

Spring Gradle

spring-data-redis를 의존성에 추가

 

Spring에서 사용하는 Redis Driver -> 크게 Lettuce, Jedis

spring-data-redis는 Lettuce, Jedis를 추상화하여 사용도록 spring에서 지원


2. 예제 코드

예제 실행

프로젝트 구성

@Component
@RequiredArgsConstructor
public class Redis implements ApplicationRunner {

    //redis command를 수행하기 위한 high-level 추상화
    final private StringRedisTemplate redisTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        //기본적인 
        ValueOperations<String, String> values = redisTemplate.opsForValue();
        values.set("testKey", "testValue");
    }
}

Expiration은?

redisTemplate에서 expiration은 어떻게 설정할까 찾다가 아래와 같이 set에 time을 입력하는 오버로딩함수가 있었다

TimeUnit은 timeout의 일,월,시간등을 설정하는 enum 클래스다

@Component
@RequiredArgsConstructor
public class Redis implements ApplicationRunner {

    final private StringRedisTemplate redisTemplate;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        ValueOperations<String, String> values = redisTemplate.opsForValue();
        //20초후에 데이터 만료
        values.set("testKey", "testValue", 20, TimeUnit.SECONDS);
    }
}

위와 같이 20초후에 데이터가 사라지도록 예제를 짤 수 있다.

 

어떻게 바로 Redis와 연동되나

지금 예제 코드를 보면 황당할 것이다.

Redis에 대한 설정도 그 어떤 것도 없이 데이터를 Set하였는데 서버에 데이터가 들어갔다.

원래라면 @Configuration 어노테이션이 있는 Redis관련 config클래스를 정의해야할 것이다. 아래는 예시이다.

@Configuration
public class RedisConfig {

 @Bean
 public JedisConnectionFactory jedisConnectionFactory() {
  
  JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
  jedisConnectionFactory.setHostName("192.168.1.10");
  jedisConnectionFactory.setPort(6379);
  jedisConnectionFactory.setTimeout(0);
  jedisConnectionFactory.setUsePool(true);
  
  return jedisConnectionFactory;
 }

 @Bean
 public StringRedisTemplate redisTemplate(JedisConnectionFactory jedisConnectionFactory) {
  StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
  stringRedisTemplate.setConnectionFactory(jedisConnectionFactory);
  return stringRedisTemplate;
 }
}

 하지만 예제 코드에는 config파일은 없다. 이유는 boot에서 지원하는 Auto Configuration덕분이다.

@SpringBootApplication 어노테이션안에는 @EnableAutoConfiguration이 있다.어노테이션은 spring.factories 라는 스프링부트의 meta파일을 읽어서 정의된 config들을 빈으로 등록해준다.

위와 같이 spring.factories에는 많은 config들이 정의되어있고 이곳에는 spring-data-redis에 관련된 config도 정의되어있다. 이로 인해 우리는 redis config를 정의하지 않고 바로 사용할 수 있는 것이다.

위와 같이 auto configuration에 기본적인 redis 주소와 포트가 입력되어있기 때문에 설정없이 바로 Redis와 연동이 가능하다. (redis 기본포트: 6379)

 

 

반응형

'알아가는 개발' 카테고리의 다른 글

Transaction & InnoDB Lock 개념/예제  (1) 2022.10.20
JWT 저장소에 대한 고민(feat. XSS, CSRF)  (3) 2021.04.22
[NoSql] Redis 개념/특징  (0) 2020.06.14
Base64 인코딩 개념/과정  (0) 2020.06.13
REST란 무엇일까?  (0) 2020.05.14
Comments