文档章节

Guava之controller中使用缓存cache

乐在克里特
 乐在克里特
发布于 2017/02/23 14:57
字数 264
阅读 19
收藏 0

之前介绍过的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;
	}
}

 

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 16
博文 268
码字总数 394729
作品 0
杭州
程序员
私信 提问
分布式缓存系列之guava cache

guava是google的一个开源java框架,其github地址是 https://github.com/google/guava。guava工程包含了若干被Google的 Java项目广泛依赖的核心库,例如:集合 [collections] 、缓存 [caching...

浮云骑士LIN
07/22
0
0
guava cache与spring集成

缓存的背景 缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。在cpu进行计算的时候, 首先是读取寄存器,然后内存,...

爪哇小贩
2016/11/20
973
0
Google Guava之--cache

一、简介   Google Guava包含了Google的Java项目许多依赖的库,如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注...

烟火_
2014/10/30
0
0
Guava 源码分析之Cache的实现原理

前言 Google 出的 Guava 是 Java 核心增强的库,应用非常广泛。 我平时用的也挺频繁,这次就借助日常使用的 Cache 组件来看看 Google 大牛们是如何设计的。 缓存 本次主要讨论缓存。缓存在日...

crossoverJie
01/20
0
0
Google Guava 在实际场景中的应用封装

毕竟西湖六月中,风光不与四时同。 接天莲叶无穷碧,映日荷花别样红。 晓出净慈寺送林子方-杨万里 周末与小伙伴约了一波西湖,这个时间荷花开的正好...,在开始文章之前先放一张“佛系”美图...

glmapper
10/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

case when then

case具有两种格式。简单case函数和case搜索函数。 --简单case函数case sex when '1' then '男' when '2' then '女’ else '其他' end--case搜索函数case when sex = '1' the...

architect刘源源
12分钟前
0
0
Kubernetes探秘—kubelet的配置参数

kubelet是Kubernetes中的核心组件,需要在每一个节点安装,也是kubernetes集群启动的第一个服务。kubelet的参数存放在多个目录,修改时如果不完整就会导致各种错误,下面我们kubelet的参数存...

openthings
15分钟前
0
0
如何通过 MySQL 的二进制日志恢复数据库数据

经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响。所以本文我们将和大家一起分享学习下如何通过 MySQL 的二...

吴伟祥
24分钟前
1
0
org.apache.catalina.startup.Catalina stopServer SEVERE: Could not contact localhost:8005. Tomcat may

org.apache.catalina.startup.Catalina stopServer SEVERE: Could not contact localhost:8005. Tomcat may 2017年07月21日 14:52:10 子木HAPPY阳VIP 阅读数:14134 标签: tomcatnginx 更多......

linjin200
26分钟前
1
0
线下工坊|Blockchain Coding Day:零基础教你开发DAPP(北京)

我们的目标是通过编程学习让你更了解区块链技术。这将对区块链开发初学者一次很好的体验。这里需要强调一下,编程零基础也能学会。 我们将以小组的形式,由教练带领学员完成DAPP开发。每位学...

HiBlock
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部