일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- JPA 동시성
- spring security 인증
- JPA Lock
- Transaction isolation level
- 스프링
- JPA 비관적락
- 디자인 패턴
- 스마일게이트
- 스프링 log
- 암호화
- spring
- 안드로이드
- Android
- annotation
- JPA
- 서버개발캠프
- 개발
- JPA 낙관적락
- Pessimistic Lock
- 낙관적락 비관적락 차이
- flask
- Optimistic Lock
- Redis
- 서버
- 캠프
- spring security
- component
- 스프링 로그
- Inno DB
- bean
- Today
- Total
모르는게 많은 개발자
[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)
'알아가는 개발' 카테고리의 다른 글
Transaction & InnoDB Lock 개념/예제 (1) | 2022.10.20 |
---|---|
JWT 저장소에 대한 고민(feat. XSS, CSRF) (4) | 2021.04.22 |
[NoSql] Redis 개념/특징 (0) | 2020.06.14 |
Base64 인코딩 개념/과정 (0) | 2020.06.13 |
REST란 무엇일까? (0) | 2020.05.14 |