반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[java] API method cache 본문

JAVA/springboot

[java] API method cache

닉의네임 2023. 10. 29. 16:55
반응형

Api 성능이슈로 정적인 데이터, 동적인데이터에 분리가 필요하고 정적인 데이터에 대한 캐싱이 필요한 상황이 되었다.

cache 키를 어떻게 생성할건지에 대한 고민을..

 

우선 키  생성방법은 단일 param 을 key 로 cache key 생성  

@Cacheable(value = CacheKey.DISTANCE, key = "#request.distance", unless = "#result == null")

 

복수의 param 을 key 로 cache key 생성   

@Cacheable(value = CacheKey.DISTANCE, key = "{#request.distance, #request.countryCode}", unless = "#result == null")

 

key generator 를 만들어서 cache key 생성   

@Cacheable(value = CacheKey.DISTANCE, key = "T(com.doo.aqqle.utils.KeyGenerator).cacheKey('getDistance', #request.distance, #request.countryCode)")

 

우선 여기서 request 는 거리와 국가코드를 정의한 request parameter 임

package com.doo.aqqle.model.request;

import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiParam;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class LocationRequest extends CommonRequest{

    @ApiParam(value = "거리 km", defaultValue = "5")
    private String distance;

    @ApiParam(value = "국가코드", defaultValue = "KR")
    private String countryCode;
}

 

cache 키를 generator 로 만든이유는 request 중 모든 파라미터를 키로 정할수 없고 회사 서비스에서는 끽해야 검색키워드, 상점코드 정도 일텐데.. 메소드별로 캐싱을 하려면 해당 메소드를 구분할 수 있어야 하는 이유로 제너레이터 생성

 

생성된 키를 확인해보잣 

 

거리와 국가코드를 파라미터로 전달 받고 키의 prefix는 메소드 명 (getDistance)

생성된 키 확인

 

docker redis cli 접속

docker exec -it redis_test redis-cli

생성된 모든 키 확인 

keys *

거리르 5, 10, 20으로 변경해서 호출

 

distance 는 config에서 정의한  cache key , getDistance는 메소드명, 10은 distance 파라미터, KR은 countryCode

아래는 KeyGenerator

package com.doo.aqqle.utils;

public class KeyGenerator {

    public static Object cacheKey(String prefix, Object o1, Object o2) {
        return prefix+":" + o1 + ":" + o2;
    }

}

 

이제 아래 내용 확인 

  • 키 수명
  • max 키 갯수, max 넘어갈 경우 exception 처리
  • 데이터 정합확인 
반응형
Comments