Java/API
[java] API method cache
father6019
2023. 10. 28. 22:45
728x90
반응형
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 처리
- 데이터 정합확인
728x90
반응형