之前介绍过的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的更多相关文章

  1. Java 中常用缓存Cache机制的实现

    所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. 所谓缓存,就是将程序或系统经常要调用的对象存在内存中 ...

  2. Java 中常用缓存Cache机制的实现《二》

    所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. AD: Cache 所谓缓存,就是将程序或系统经常要 ...

  3. HTTP请求中的缓存(cache)机制

    http://www.chaorenmao.com/blog/?p=79 流程 当资源第一次被访问的时候,HTTP头部如下 (Request-Line)  GET /a.html HTTP/1.1Ho ...

  4. Java中常用缓存Cache机制的实现

    缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例. 这样做可以减少系统开销,提高系统效率. 缓存主要可分为二大类: 一.通过文件缓存,顾名思义文件 ...

  5. .net core中使用缓存(cache)

    官方文档:https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-2.2#use ...

  6. Asp.net中使用缓存(cache)

    做了一个时间优化的项目,目的就是缩短程序过程中的时间花费,最后发现了asp.net和asp.net core 中都有缓存工具来进行缓存,以加快访问速度. 找了官方demo来进行分析: ObjectCa ...

  7. Springboot中的缓存Cache和CacheManager原理介绍

    背景理解 什么是缓存,为什么要用缓存 程序运行中,在内存保持一定时间不变的数据就是缓存.简单到写一个Map,里面放着一些key,value数据,就已经是个缓存了 所以缓存并不是什么高大上的技术,只是个 ...

  8. 批量删除ASP.NET中的缓存(cache)

    IDictionaryEnumerator em = HttpContext.Current.Cache.GetEnumerator(); while (em.MoveNext())        { ...

  9. 如何在 Linux 中清除缓存(Cache)

              如何在 Linux 中清除缓存(Cache)            方法一: http://mp.weixin.qq.com/s?__biz=MjM5ODAzODgyMQ==&am ...

随机推荐

  1. SPI、IIC、IIS、UART、JTAG的应用场合级区别

    SPI  SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC68HCXX系列处理器上定义的. SPI接口 ...

  2. 2019-8-31-C#-遍历枚举

    title author date CreateTime categories C# 遍历枚举 lindexi 2019-08-31 16:55:58 +0800 2018-03-13 20:42:2 ...

  3. shell选项和参数

  4. 一、bootstrap-select输入选择框

    一.bootstrap-select简单使用 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  5. jQuery效果-隐藏与显示 小方块的移除

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  6. springboot themaleaf 各种报错

    1.访问themaleaf页面报错 Whitelabel Error Page This application has no explicit mapping for /error, so you ...

  7. shell中的空格【转载】

    1.定义变量时, =号的两边不可以留空格. eg: gender=femal————right gender =femal———–wrong gender= femal———–wrong gender ...

  8. nucleus plus学习总结

    前言:     最近一直都在看nucleus plus,之前看过一些linux内核的一些东西,但都是停留在文字上,代码看的很少,这个nucleus plus内核的代码量不大,看过source code ...

  9. MySQL 5.7免安装版设置编码格式、设置root用户密码 远程登录.

    一.设置默认编码格式为utf-8 ... 由于免安装版并没有my.ini的配置文件.需要自行粘贴配置并创建一个my.ini 配置如下: [mysql] # 设置mysql客户端默认字符集 defaul ...

  10. 启发式分治:2019牛客多校第三场 G题 Removing Stones

    问题可以转换为求有多少个区间数字的总和除2向下取整大于等于最大值.或者解释为有多少个区间数字的总和大于等于最大值的两倍(但是若区间数字总和为奇数,需要算作减1) 启发式分治: 首先按最大值位置分治,遍 ...