이 글에서는 RedisRepository가 아닌, RedisTemplate를 사용한 코드를 포스팅합니다.
1
2
3
4
5
6
7
8
|
// maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
// gradle
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
|
cs |
먼저 redis의 의존성을 추가합니다.
1
2
3
4
|
spring:
redis:
host: localhost
port: 6379
|
cs |
그 다음은 yml에 redis의 host와 port를 적어줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(host, port);
}
}
|
cs |
redis 사용을 위한 configuration입니다.
host와 port는 yml에 작성한 값들을 가져옵니다.
하지만 SpringBoot 2.0부터는 auto-configuration으로 위에 작성한 RedisConnectionFactory나 RedisTemplate와 같은 것들이 자동으로 생성된다고 합니다.
따라서 SpringBoot 2.0 이상 버전을 사용하신다면 RedisConfig는 생략하셔도 됩니다.
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
31
|
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.Duration;
@Service
@RequiredArgsConstructor
@Transactional
public class RedisService {
private final RedisTemplate<String, String> redisTemplate;
public String getRedisTemplateValue(String key) {
return redisTemplate.opsForValue().get(key);
}
public void deleteRedisTemplateValue(String key) {
redisTemplate.delete(key);
}
public void setRedisTemplate(String key, String value, long time) {
if (getRedisTemplateValue(key) != null) {
deleteRedisTemplateValue(key);
}
Duration expiredDuration = Duration.ofMillis(time);
redisTemplate.opsForValue().set(key, value, expiredDuration);
}
}
|
cs |
Redis의 기능을 담은 Service입니다.
위에서 언급한것처럼 auto-configuration으로 인해 RedisTemplate이 자동으로 생성되었기 때문에 바로 사용할 수 있습니다.
지금은 제가 문자열을 사용하기 때문에 value를 String으로 입력했지만 Object를 하셔도 됩니다.
set을 이용하여 <key, value> 쌍의 데이터를 저장합니다.
저장하기 전에 getRedisTemplateValue에서 key로 데이터를 검색하고, 존재한다면 deleteRedisTemplate에서 삭제부터 진행합니다.
만료 시간을 매개변수로 같이 보내서 지정할 수 있습니다.
이 때는 해당 시간이 종료되면 자동으로 삭제됩니다.
만료 시간을 매개변수로 보내지 않을 경우에는 해당 데이터가 삭제되지 않습니다.
세팅이 끝났으니 테스트를 해봐야겠네요.
위 명령어를 통해 redis에 접속할 수 있습니다.
여기서 -h는 호스트를 나타내며, -p는 포트번호입니다.
default는 127.0.0.1:6379 (localhost:6379)이니 localhost에서 작업하시는 분이라면 생략하셔도 됩니다.
그리고 위 명령어로 redis가 비어있는 것을 확인합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import com.example.test.global.redis.RedisService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class RedisTest {
private final long expiredTime = 60 * 1000;
@Autowired
private RedisService redisService;
@Test
void setRedis() {
String key = "key:emoney96";
String value = "redis test value";
redisService.setRedisTemplate(key, value, expiredTime);
}
}
|
cs |
테스트 코드를 간단하게 작성해봤습니다.
key, value, expiredTime까지 값을 넣어주시고, key가 "key:emoney96"이고 만료 시간이 1분인 데이터를 redis에 저장합니다.
여기서 expiredTime은 ms(밀리 초) 단위입니다.
이 테스트를 실행하여 redis에 데이터를 넣어주겠습니다.
일단 테스트는 성공했고
데이터도 들어간 것을 확인할 수 있습니다.
만료 시간을 1분으로 등록했기 때문에 1분이 지나면 자동으로 사라집니다.
그리고 get key 명령어를 통해 해당 데이터의 value를 확인할 수 있습니다.
그리고 ttl 명령어로 해당 데이터의 유효 시간을 확인할 수 있습니다.
단위는 초 단위이며, 위처럼 양의 정수는 남은 시간을 뜻합니다.
만료 시간을 설정하지 않았을 경우 ttl 값은 -1입니다.
해당 데이터가 삭제됐거나 존재하지 않을 경우 ttl 값은 -2입니다.
'Spring' 카테고리의 다른 글
필드 주입 vs 생성자 주입 (0) | 2022.10.31 |
---|---|
SpringBoot OAuth 적용 [Naver - 2] (0) | 2022.10.18 |
SpringBoot OAuth 적용 [Naver - 1] (0) | 2022.10.17 |
SpringBoot OAuth 적용 [Kakao - 2] (0) | 2022.10.17 |
SpringBoot OAuth 적용 [Kakao - 1] (0) | 2022.10.14 |