일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- high level client
- flask
- Java
- Test
- Python
- Elasticsearch
- 차트
- Mac
- aggs
- plugin
- docker
- Kafka
- zip 암호화
- analyzer test
- query
- aggregation
- license delete
- API
- ELASTIC
- License
- TensorFlow
- token filter test
- 파이썬
- matplotlib
- MySQL
- springboot
- 900gle
- sort
- zip 파일 암호화
- licence delete curl
Archives
- Today
- Total
개발잡부
[java] API method cache 본문
반응형
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 처리
- 데이터 정합확인
반응형
'JAVA > springboot' 카테고리의 다른 글
[Redis] API 성능개선 ( redis 캐시 적용하기 ) - 실전 (0) | 2023.12.19 |
---|---|
[java] API method cache - 적용 (0) | 2023.10.31 |
[java] API - 검색 api 성능 개선 final (2) | 2023.10.15 |
[java] API - cache method (0) | 2023.10.15 |
[java] API - redis cache (2) | 2023.10.09 |
Comments