본문 바로가기

Back-End/Redis

Redis Spring Boot에 설정하기 및 개요

Redis, Cache 는 왜 사용하는걸까?

백앤드 개발을 하다보면 가끔 조회하는 시간 때문에 API 응답이 너무 느릴 때가 있다. 이럴 때 캐시를 사용하면 응답시간이 많이 줄어든 경험이 있을 것이다. ( 인메모리에 올려서 한 경우도 있지만?... ) 그렇다고 무조건 캐시를 사용하면 될까? 남용하게 되면 서비스의 신뢰성이 떨어지는 경우가 발생할 수도 있다.

 

Cache 도입할때 고려사항 - 1. 정보가 잘 변경되지 않는 경우 + 처리 시간이 긴 경우

이를 고려하지 않고 도입을 한다면 데이터가 맞지 않아 서비스의 신뢰성이 떨이지게 된다

 

Cache 도입할때 고려사항 - 2. 빈번한 동일 요청

빈번하게 동일한 검색 요청을 하게 된다면 Cache 도입을 고려해볼 수 있다. 디스크에서 읽어오는 것 보다 서버의 메모리에서 읽어오면 훨씬 빠른 I/O 성능을 얻을 수 있다.

 

이 두가지를 고려했을 때 타당하다면 Cache 도입을 통해 사용자에게 쾌적한 서비스를 제공해주는게 좋다고 생각한다.

그렇다면 어떤 정보들을 보통 Cache로 사용할까?

  • 쇼핑물에서 베스트셀러, 추천상품 등
  • 상품의 카테고리 및 카테고리별 등록 상품 수
  • 포탈의 검색어

Cache를 도입하기러 결정했다면, 주의해야 할 점은?

  1. 캐싱할 정보를 선택하기
  2. 캐싱할 정보의 유효기간 설정하기 ( Time To Live )
  3. 캐싱할 정보의 갱신시점

백앤드 설계를 할 때 API기능 설계 단계에서부터 캐싱 전략을 세우는게 좋다.

 

Redis + Spring boot

1. gradle에 추가

    // redis
    compile('org.springframework.boot:spring-boot-starter-data-redis')

2. application.yml에 Redis 연결정보 설정하기

# prod config
spring:
  redis:
    host: redis 주소
    port: 6379
    prefix: 

3. 해당 프로젝트에 캐시 사용하겠다는 어노테이션 추가

@SpringBootApplication
@EnableCaching
public class CacheApplication 

4. 캐시 등록, 조회, 삭제 중 원하는 기능 추가

    @Cacheable(value = "goodsCardsByAreaId", keyGenerator = "customKeyGenerator", cacheManager = "cacheManager10Minute")
    public List<GoodCardDTO> makeGoodsCardsByAreaId(String sort, Integer areaId, Integer saleType,

5. Redis Cache 설정 커스터마이징 하기

@Configuration 
@EnableCaching 
public class RedisCacheConfig extends CachingConfigurerSupport 
{ 
  @Bean 
  @Override 
  public CacheManager cacheManager() { 
	RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory()); 
    RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig() 
    	.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) 
        .prefixKeysWith("imhere:") 
		.entryTtl(Duration.ofHours(5L)); 
    builder.cacheDefaults(configuration); 
    return builder.build(); 
    }
}

 

조회 성능을 향상시키기 위한 방법 중 하나인 Redis와 관련해서 글을 써보았다. 항상 시스템 성능 향상을 위해 공부해 나가야겠다.

 

https://redis.io/

 

Redis

Try it Ready for a test drive? Check this interactive tutorial that will walk you through the most important features of Redis. Download it Redis 5.0.7 is the latest stable version. Interested in release candidates or unstable versions? Check the downloads

redis.io

https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache

'Back-End > Redis' 카테고리의 다른 글

레디스와 분산락  (0) 2020.07.19
Redis란?  (0) 2020.03.17
레디스(Redis)의 다양한 활용 사례  (4) 2020.03.17