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<String,Object> 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<SummaryVo> resObj = (ObjectResultEx<SummaryVo>) 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<String, Object>() {
@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<String, Object> commonCache(CacheLoader<String, Object> loader) {
synchronized (logger){
cacheBuilder = CacheBuilder
.newBuilder()
.refreshAfterWrite(1, TimeUnit.MINUTES)
.build(loader);
}
return cacheBuilder;
}
}
Guava之controller中使用缓存cache的更多相关文章
- Java 中常用缓存Cache机制的实现
所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. 所谓缓存,就是将程序或系统经常要调用的对象存在内存中 ...
- Java 中常用缓存Cache机制的实现《二》
所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. AD: Cache 所谓缓存,就是将程序或系统经常要 ...
- HTTP请求中的缓存(cache)机制
http://www.chaorenmao.com/blog/?p=79 流程 当资源第一次被访问的时候,HTTP头部如下 (Request-Line) GET /a.html HTTP/1.1Ho ...
- Java中常用缓存Cache机制的实现
缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例. 这样做可以减少系统开销,提高系统效率. 缓存主要可分为二大类: 一.通过文件缓存,顾名思义文件 ...
- .net core中使用缓存(cache)
官方文档:https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-2.2#use ...
- Asp.net中使用缓存(cache)
做了一个时间优化的项目,目的就是缩短程序过程中的时间花费,最后发现了asp.net和asp.net core 中都有缓存工具来进行缓存,以加快访问速度. 找了官方demo来进行分析: ObjectCa ...
- Springboot中的缓存Cache和CacheManager原理介绍
背景理解 什么是缓存,为什么要用缓存 程序运行中,在内存保持一定时间不变的数据就是缓存.简单到写一个Map,里面放着一些key,value数据,就已经是个缓存了 所以缓存并不是什么高大上的技术,只是个 ...
- 批量删除ASP.NET中的缓存(cache)
IDictionaryEnumerator em = HttpContext.Current.Cache.GetEnumerator(); while (em.MoveNext()) { ...
- 如何在 Linux 中清除缓存(Cache)
如何在 Linux 中清除缓存(Cache) 方法一: http://mp.weixin.qq.com/s?__biz=MjM5ODAzODgyMQ==&am ...
随机推荐
- POJ 3468 A Simple Problem with Integers(线段树,区间更新,区间求和)
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 67511 ...
- Codeforces Paths and Trees
Paths and Trees time limit per test3 seconds memory limit per test256 megabytes Little girl Susie ac ...
- docker概述与安装及运行容器
传统虚拟化 传统虚拟化步骤 1.安装虚拟化软件以及虚拟化的管理软件 2.创建虚拟机 3.给虚拟机安装os 4.在虚拟机内部不是应用(http.db之类的应用) 传统虚拟化的特点 1.VM与VM之间是完 ...
- win10下RabbitMQ的安装和配置
在win10环境下安装RabbitMQ的步骤 第一步:下载并安装erlang 原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang. 下载 ...
- C# Aspose.Words 数据写入到word,模板样式复杂(转换指定内容并返回多张图片)
public ResultResponse<string[]> PrintStudyRecords([FromBody]StudyInfo info) { ResultResponse&l ...
- showkey - 检查来自键盘的扫描码和键盘码
览 (SYNOPSIS) showkey [ -[hVskm] | --help | --version | --scancodes | --keycodes | --keymap ] [ -t N ...
- react 获取token
1.在action 中发送请求,j将获取得到的token 储存起来 到localhost //登陆发送请求 export const loginUser = (userData,history)= ...
- 本地代码上传至git仓库
1.进入项目文件夹,初始化 git init 2.添加文件到版本库 git add . 3.提交文件 git commit -m "初次提交" 4.关联远程仓库 git remot ...
- elasticsearch 6.x 安装search guard
前言 es之前版本一直无用户验证功能,不过官方有提供一x-pack,但是问题是付费.在es的6.3.2版本中,已经集成了x-pack,虽然es团队已经对x-pack开源,但是在该版本中如果需要使用到安 ...
- 安装JDK,并检测JDK是否安装成功
方法/步骤 首先,我们需要先安装好我们的JDK软件,安装好之后,我们需要对我们的电脑进行环境变量配置的设置,这样我们安装的JDK才能真正起到作用. 第一步:我们需要将光标放在“计算机”上面,然 ...