일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Aggregation
- vavr
- Analyzer
- redis
- Docker
- request cache
- 아이온큐
- Selenium
- ann
- api cache
- API
- JPA
- Elasticsearch
- KNN
- file download
- dbeaver
- java
- NORI
- elasticsearch cache
- 테슬라
- Cache
- Query
- java crawler
- IONQ
- aqqle
- TSLA
- aggs
- Elastic
- mysql
- 양자컴퓨터
Archives
- Today
- Total
아빠는 개발자
[java] API method cache 본문
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
반응형
'Java > API' 카테고리의 다른 글
[java] API 성능개선 (1) | 2023.11.26 |
---|---|
[java] API Controller에서 데이터를 받아오는 방법 (1) | 2023.10.28 |
[java] API - geo distance (0) | 2023.10.21 |
[java] API - 검색 api 성능 개선 final (0) | 2023.10.14 |
[java] API - redis cache for method (0) | 2023.10.13 |