@RequiredArgsConstructor
@Configuration
@EnableRedisRepositories
public class RedisRepositoryConfig {
private final RedisProperties redisProperties;
// lettuce
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
}
// redis-cli 사용을 위한 설정
@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의 연결을 정의하는 클래스이다. RedisConnectionFactory를 통해 내장 혹은 외부의 Redis와 연결한다. RedisTemplate를 통해 RedisConnection에서 넘겨준 byte 값을 객체 직렬화한다.
RedisTemplate을 열어보면 Hash, Set 등 다양한 방식을 사용해 Redis에 데이터를 저장하는 방법을 알 수 있다.
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class RedisService {
private final RedisTemplate<String, String> redisTemplate;
@Transactional
public void setValues(String key, String value){
redisTemplate.opsForValue().set(key, value);
}
// 만료시간 설정 -> 자동 삭제
@Transactional
public void setValuesWithTimeout(String key, String value, long timeout){
redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.MILLISECONDS);
}
public String getValues(String key){
return redisTemplate.opsForValue().get(key);
}
@Transactional
public void deleteValues(String key) {
redisTemplate.delete(key);
}
}
Redis를 편히 사용하기 위해 메서드화했다.
setValues(String key, String value)
: {key, value]
값을 저장한다.setValuesWithTimeout(String key, String value, long timeout)
: {key, value]
값을 유효시간(timeout)과 함께 저장할 수 있다. 단위는 토큰의 유효기간 단위와 동일하게 milliseconds로 지정했다.getValues(String key)
: key 값을 사용해 value 값을 가져온다.deleteValues(String key)
: key 값을 사용해 데이터를 삭제한다.