[NoSql] SpringBoot, Redis 연동 예제
이번 포스팅에서는 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)