Redis Cache 적용기 - HongDam-org/TWTW GitHub Wiki

Redis Cache 성능 비교

태그: PORTFOLIO 날짜: 2024년 3월 15일 참여자: 진주원, 김승진

문제상황


사용자에게 경로를 제공하기 위해 Kakao, Naver, Tmap Open API를 사용한다. 위 API 제공에 있어 호출까지의 시간이 소요되고 비용 낭비가 발생

  • 이미 반환된 경로를 사용자가 재사용하는 경우가 많기 때문에 경로를 임시 메모리에 저장하는 로직 필요
  • ‘경로’라는 데이터 특성 상 한번 참조된 값에 대해 변경이 자주 일어나지 않음

접근

  • Redis Cache를 이용하여 Open API의 반환값을 일부 저장하여 사용자에게 제공

적용

  • @CachePut과 @Cacheable Annotation을 사용하여 API에 레디스 캐시 적용

시퀀스 다이어그램

image


@CachePut(
        value = "surroundPlace",
        key = "'searchSurroundPlace'.concat(#surroundPlaceRequest.toString())",
        cacheManager = "cacheManager")
public PlaceResponse searchSurroundPlace(final SurroundPlaceRequest surroundPlaceRequest) {
    return getPlaceResponse(surroundPlaceRequest);
}

@Cacheable(
        value = "surroundPlace",
        key = "'searchSurroundPlace'.concat(#surroundPlaceRequest.toString())",
        cacheManager = "cacheManager",
        unless = "#result.results.size() <= 0")
public PlaceResponse searchSurroundPlaceWithCache(
        final SurroundPlaceRequest surroundPlaceRequest) {
    return getPlaceResponse(surroundPlaceRequest);
}

시나리오

Redis Cache를 적용하였을 때 성능 분석을 위해 다음과 같은 시나리오를 세우고 테스트 진행

  1. 회원가입 수행
  2. 보행자 경로 API를 요청하여 수행

결론


평균 Latency 4.12배 향상

  • 추가로, 매번 OpenAPI를 호출하지 않기 때문에 네트워크 비용을 아끼는 효과도 있음

동기 처리 [평균 Latency 91.88ms]

image

비동기 처리 [평균 Latency 22.26ms]

image

분석


  1. Redis Cache를 사용할 경우 사용하지 않은 경우에 비해 4.12배의 속도 성능 향상
  2. Open API를 중복 요청하지 않아 네트워크 비용 절감
  3. CachePut를 통해 사용자의 요청 경로가 변경된 경우 기존 Cache값을 삭제하고 변경된 경로를 저장하고 제공하여 서비스상 유연성 향상