RestTemplate
Key를 직접 설정하고 자료형을 선택해서 세밀하게 데이터 타입을 다룸으로써 Redis활용이 가능하다.
Config
Redis Connection Factory
@Bean
public RedisConnectionFactory connectionFactory() {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName(redisProperty.host());
config.setUsername(redisProperty.username());
config.setPort(redisProperty.port());
config.setPassword(redisProperty.password());
return new LettuceConnectionFactory(config);
}Redis Template
아래와 같이 Object로 지정을 할 수 있고
@Bean
public RedisTemplate<String, Object> couponSetRedisTemplate() {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory());
// key-value
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
// hash
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}만약 특정 타입을 위해서 RedisTemplate을 설정을 한다면 아래와 같이 설정을 해줄 수도 있다.
@Bean
public RedisTemplate<String, Integer> integerRedisTemplate() {
RedisTemplate<String, Integer> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(connectionFactory());
// key-value
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericToStringSerializer<>(Integer.class));
// hash
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericToStringSerializer<>(Integer.class));
return redisTemplate;
}주로 사용하는 Method
- opsForValue()
- 문자열 작업
- opsForHash()
- 해시 작업
- opsForList()
- 배열(리스트) 작업
- opsForSet()
- 집합(중복 처리) 작업
- opsForZSet()
- 순서를 보장한 집합 작업
- rank를 사용한 우선순위
- opsForGeo()
- 지리 처리
- 이외 메서드
- delete
- 키 삭제
- expire
- 특정 시간 뒤 만료되도록 설정
- delete
예시
Spring에서는 위에서 Config로 설정한 템플릿을 아래와 같이 주입해 줄 수 있다
private final RedisTemplate<String, Object> redisTemplate;
private final RedisTemplate<String, Integer> redisIntegerTemplate;이후 원하는 함수를 사용해서 Redis에 데이터를 저장 할 수 있다
redisTemplate
.opsForZSet()
.add(redisKey, userId, System.currentTimeMillis());String redisKey = convertCouponIsOpenRedisKey(couponId);
ValueOperations<String, Integer> opsForValue =
redisIntegerTemplate.opsForValue();
// 상태 지정
opsForValue.set(redisKey, wishStatus, durationHour, TimeUnit.HOURS);