쩨이엠 개발 블로그

[ Redis ] Redis 환경 간단하게 구축하기 본문

개발/Spring

[ Redis ] Redis 환경 간단하게 구축하기

쩨이엠 2020. 9. 16. 19:34
728x90
반응형

 

Redis 란 Key-Value 형태를 띄고 있는 In Memory 기반의 NoSQL DBMS이다.

보통 캐싱 / 세션관리 등으로 쓰고 있는데 내 경우는 임시데이터를 잠시 저장하고 그걸 빠르게 가져오기 위해 사용하였다.

 

의존성 환경

  • Spring boot 2.2.5 RELEASE
  • Spring Boot Data Redis 2.2.5 RELEASE
  • Java 11 (8도 상관없음)
 
 plugins {
    id 'org.springframework.boot' version '2.2.5.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
 }
 
 sourceCompatibility = '11'
 
 repositories {
    mavenCentral()
}

dependencies {
	...
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation 'org.modelmapper:modelmapper:2.3.6'
    ...
}

 

 

설정

RedisConfig.java

 
@Configuration
@RequiredArgsConstructor
public class RedisConfig {
    private final ObjectMapper objectMapper;
    private final RedisProperties redisProperties;

    @Bean
    public ModelMapper modelMapper(){
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
        return modelMapper;
    }

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        final RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer(objectMapper));
        return template;
    }
}
 

RedisProperties 은 application.yml 에서 설정한 host와 port를 사용한다

 

 

application.yml

 
spring:
 redis:
   port: 6379
   host: iot-redis.amazonaws.com
   
   ...
   
   

 

 

Redis 사용

RedisUtils.java

 
@Component
@RequiredArgsConstructor
public class RedisUtils {
    private final RedisTemplate<String, Object> redisTemplate;
    private final ModelMapper modelMapper;

    public void put(String key, Object value, Long expirationTime){
        if(expirationTime != null){
            redisTemplate.opsForValue().set(key, value, expirationTime, TimeUnit.SECONDS);
        }else{
            redisTemplate.opsForValue().set(key, value);
        }
    }

    public void delete(String key){
        redisTemplate.delete(key);
    }

    public <T> T get(String key, Class<T> clazz){
        Object o = redisTemplate.opsForValue().get(key);
        if(o != null) {
            if(o instanceof LinkedHashMap){
                return modelMapper.map(o, clazz);
            }else{
                return clazz.cast(o);
            }
        }
        return null;
    }

    public boolean isExists(String key){
        return redisTemplate.hasKey(key);
    }

    public void setExpireTime(String key, long expirationTime){
        redisTemplate.expire(key, expirationTime, TimeUnit.SECONDS);
    }

    public long getExpireTime(String key){
        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
    }
}
 

 

  • redisTemplate.opsForValue().get(key) : key 값으로 value 를 가져온다
  • redisTemplate.opsForValue().set(key, value, time, unit) : key값으로 value를 저장한다 만약 만료 시간을 지정하는 경우엔 time 과 단위를 함께 세팅한다
  • redisTemplate.hasKey(key) : 키의 존재유무를 return 한다
  • redisTemplate.delete(key) : key값에 대한 데이터를 삭제한다

 

728x90
반응형
Comments