Guava controller 에서 캐 시 cache 사용 하기
앞서 소 개 했 던 Guava 라 는 공구 꾸러미 에는 편리 한 용법 이 많 습 니 다.다음은 봉 인 된 Cache 를 사용 하여 기능 을 실현 해 야 합 니 다.
예시:
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/hello")
public class HelloController {
private static Logger logger = LoggerFactory.getLogger(HelloController .class);
public static LoadingCache cacheBuilder;
@Autowired
private OverviewService overviewService;
static OverviewParameter op ;
@RequestMapping(value="/hh",method=RequestMethod.GET)
public Result> sayHello(OverviewParameter overviewParameter){
Result> result = null;
setOviewParameter(overviewParameter);
ObjectResultEx resObj = (ObjectResultEx) getDataInCache("summary", overviewParameter);
...
return result;
}
/**
*
*/
private Object getDataInCache(final String key, OverviewParameter overviewParameter){
logger.info("before refresh cache, key:{}, param:{}",key, JSONObject.toJSONString(overviewParameter));
op = overviewParameter;
try {
if ((cacheBuilder != null) && ((ObjectResultEx) cacheBuilder.get(key)).isSuccess()){
return cacheBuilder.get(key);
}else {
return commonCache(new CacheLoader() {
@Override
public Object load(String key) throws Exception {
logger.info("refresh cache, key:{}, param:{}",key, JSONObject.toJSONString(op));
switch (key){
case "summary":
return overviewService.overviewSummary(op);
case "grantNums":
return overviewService.overviewGrantNums(op);
case "creditNums":
return overviewService.overviewCreditNums(op);
case "riskNums":
return overviewService.overviewRiskNums(op);
default:
return new ObjectResultEx<>().makeFailedResult();
}
}
}).get(key);
}
} catch (Exception e) {
logger.error(" ", e);
}
return new ObjectResultEx<>().makeFailedResult();
}
/**
* loader
*/
private LoadingCache commonCache(CacheLoader loader) {
synchronized (logger){
cacheBuilder = CacheBuilder
.newBuilder()
.refreshAfterWrite(1, TimeUnit.MINUTES)
.build(loader);
}
return cacheBuilder;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
장고의 캐시 백엔드를 Redis로 설정필자 자신이, NoSQL, cache의 지식이 부족하기 때문에, 이 기사의 대상자는 이하와 같은 분을 상정하고 있습니다. windows 사용자 NoSQL 초학자 현금 초학자 Djnago 프로젝트를 작성하고, 캐시를 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.