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 ...
随机推荐
- shape和reshape
import numpy as np a = np.array([1,2,3,4,5,6,7,8]) #一维数组 print(a.shape[0]) #值为8,因为有8个数据 print(a.shap ...
- [Git 系列] WIN7下Git的安装
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/monkey7777/article/details/32155833 1.下载git win7版本号 ...
- etcd扩展使用
etcd我已经提到很多次了,前面的可以自己查看.v3版本改用grpc接口,很简单,非常简单,易上手易学习. etcd有集群部署方式,那么就涉及部署的地址,可以动态添加部署节点,这样再应用中不可能都去关 ...
- vue项目在webpack打包后背景图片显示不了
加上 publicPath:'../../'即可
- 11.Container With Most Water (Array; Two-Pointers)
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...
- element el-table 合计在横拉滚动条的下面,正确展示应该是滚动条在合计下面
<style lang="less"> .el-table{ overflow: auto; } .el-table .el-table__body-wrapper, ...
- zabbix 基于sendmail发送邮件相关问题
先看一下脚本 #!/bin/bash to=$ subject=$ body=$ @qq.com smtp=smtp.qq.com passwd=xxxxxxxxx echo `date " ...
- java的BigDecimal比较大小
java的BigDecimal比较大小 //前提为a.b均不能为null if(a.compareTo(b) == -1){ System.out.println("a小于b"); ...
- Fiji-imageJ 无法打开
可能的原因是文件的路径包含中文名称.
- jstat详解
jstat 1. jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间. 其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时 ...