https://hihinote.tistory.com/90
이 글과 이어지는 포스팅이다.
이메일 인증을 위해 코드를 보내면 데이터베이스에 유효시간이 있는 이메일 값과 코드 값을 저장해야 한다. 이렇게 키, 밸류 값으로 이뤄지고 유효시간이 있는 데이터를 저장할 때 Redis를 사용하면 좋다고 해서 사용했다.
Redis에 대한 설명은 다른 포스팅에서 다루겠다.
build.gradle dependency
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
application-redis.properties
spring.redis.host=host.docker.internal
spring.redis.port=6379
RedisConfig
@Configuration
@PropertySource("classpath:application-redis.properties")
public class RedisConfig {//redis 사용을 위한 기본 configuration
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Bean //redis와 연결
public RedisConnectionFactory redisConnectionFactory(){
return new LettuceConnectionFactory(host, port);
}
@Bean //RedisConnection을 통해 넘어온 byte 값을 객체 직렬화 해줌 (Serialization)
public RedisTemplate<?, ?> redisTemplate(){
RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
application-redis.properties 파일 생성 후 RedisConfig 파일로 설정을 해줬다.
RedisTemplate은
- redis 커맨드 수행을 위한 high level 추상화를 제공한다
- RedisConnection을 통해 넘어온 byte 값을 Serialize(객체 직렬화) 해준다.
- Serialize를 통해 CRUD를 할 수 있는 interface를 제공한다
RedisUtil
@RequiredArgsConstructor
@Service
public class RedisUtil { //redis 기본적인 CRUD 로직
private final StringRedisTemplate template;
public String getData(String key) {
ValueOperations<String, String> valueOperations = template.opsForValue();
return valueOperations.get(key);
}
public boolean existData(String key) {
return Boolean.TRUE.equals(template.hasKey(key));
}
public void setDataExpire(String key, String value, long duration) {
ValueOperations<String, String> valueOperations = template.opsForValue();
Duration expireDuration = Duration.ofSeconds(duration);
valueOperations.set(key, value, expireDuration);
}
public void deleteData(String key) {
template.delete(key);
}
}
기본적인 redis CRUD 로직을 위한 클래스다.