운영업무를 진행하면서 redis를 활용해본기억은 있지만 제대로 설정해본적이 없어서 실습을 기반으로 기억하기 위해 남긴다
우선 레디스란? "키-값" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템이다.
implementation("org.springframework.boot:spring-boot-starter-data-redis")
spring:
data:
redis:
host: localhost
port: 6379
@Configuration
@EnableRedisRepositories
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);
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
return redisTemplate;
}
}
여기까지 redis 사용을 위한 기본 configuration이다.
Spring-boot에서 Redis를 사용하는 방법은 RedisTemplate, RedisRepository 2가지다.
두 개다 실습해보기 위해서 아래 설명처럼 설정했다
RedisTemplate을 사용하기 위한 Bean으로 설정
RedisRepository를 사용하기 위한 @EnableRedisRepositories 어노테이션 설정
@Service
@RequiredArgsConstructor
public class RedisService {
private final RedisTemplate<String, Object> redisTemplate;
public Long get(final String key) {
final Object getResult = redisTemplate.opsForValue().get(key);
return Long.valueOf(String.valueOf(getResult));
}
public void set(final String key, final Long value) {
redisTemplate.opsForValue().set(key, value);
}
}
장점:
단점 :
@Getter
@Builder
@RedisHash(timeToLive = 1800)
public class Token {
@Id
private String token;
private Integer userId;
private LocalDateTime registeredAt;
}
@Id 어노테이션을 적용하면 CrudRepository가 제공하는 findBy 구문을 사용할 수 있다.
@Id말고도 @Indexed어노테이션을 사용해도 된다.
public interface TokenRepository extends CrudRepository<Token, UUID> {
Optional<Token> findByToken(String token);
}
장점:
단점:
RedisTemplate과 RedisRepository를 사용해봤을 때, RedisRepository가 적용이 간단하다.
적용이 간단해서 그것만 쓰면 안된다. 두 사용법의 장단점을 확인해서 프로젝트의 요구 사항에 따라 적절한 방식을 선택하면 될 것 같다.