文档章节

Guava之controller中使用缓存cache

乐在克里特
 乐在克里特
发布于 2017/02/23 14:57
字数 264
阅读 16
收藏 0
点赞 0
评论 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;
	}
}

 

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 15
博文 265
码字总数 394729
作品 0
杭州
程序员
guava cache与spring集成

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

爪哇小贩 ⋅ 2016/11/20 ⋅ 0

Google Guava之--cache

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

烟火_ ⋅ 2014/10/30 ⋅ 0

Guava 源码分析之Cache的实现原理

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

crossoverJie ⋅ 01/20 ⋅ 0

Google的Guava cache 应用

Guava Cache 创建 基本上可以通过两种方式来创建cache: cacheLoader callable callback 通过这两种方法创建的cache,和通常用map来缓存的做法比,不同在于,这两种方法都实现了一种逻辑——...

rich_xu ⋅ 2013/11/13 ⋅ 0

Guava学习笔记:Guava cache

  缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。   缓存的主要作用是暂时在内存中保存业务系统的数据处理结...

pior ⋅ 2015/04/01 ⋅ 0

集中式内存缓存Guava Cache

背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁。但是由于受限于硬盘...

力谱宿云 ⋅ 2016/09/08 ⋅ 0

Guava库学习:学习Guava Cache(七)RemovalListener(1)

原文地址: Guava库学习:学习Guava Cache(七)RemovalListener(1)RemovalNotification 上一篇,Guava库学习:学习Guava Cache(六)CacheStats中我们学习了使用CacheStats获取缓存的一些...

Realfighter ⋅ 2014/12/21 ⋅ 0

Guava 源码分析(Cache 原理)

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

crossoverJie ⋅ 06/13 ⋅ 0

Guava库学习:学习Guava Cache知识汇总

原文地址:Guava库学习:学习Guava Cache知识汇总 至此,我们结束了对Guava Cache 缓存机制的学习,在学习过程中,我们学习了如何简单的通过MapMaker创建最简单的ConcurrentMap缓存,我们也了...

Realfighter ⋅ 2014/12/21 ⋅ 1

使用Guava的Cache功能

Guava是google下的一个java工具类的项目,官方网站:https://github.com/google/guava,其中集合工具,缓存工具和并发工具是比较常用的几个工具集。 使用方法是pom中引入对应的包 <dependenc...

王小明123 ⋅ 2016/03/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 数据库设计总结

规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。 注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节...

OSC_cnhwTY ⋅ 44分钟前 ⋅ 0

多线程(四)

线程池和Exector框架 什么是线程池? 降低资源的消耗 提高响应速度,任务:T1创建线程时间,T2任务执行时间,T3线程销毁时间,线程池没有或者减少T1和T3 提高线程的可管理性。 线程池要做些什...

这很耳东先生 ⋅ 51分钟前 ⋅ 0

使用SpringMVC的@Validated注解验证

1、SpringMVC验证@Validated的使用 第一步:编写国际化消息资源文件 编写国际化消息资源ValidatedMessage.properties文件主要是用来显示错误的消息定制 [java] view plain copy edit.userna...

瑟青豆 ⋅ 今天 ⋅ 0

19.压缩工具gzip bzip2 xz

6月22日任务 6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具 6.1 压缩打包介绍: linux中常见的一些压缩文件 .zip .gz .bz2 .xz .tar .gz .tar .bz2 .tar.xz 建立一些文...

王鑫linux ⋅ 今天 ⋅ 0

6. Shell 函数 和 定向输出

Shell 常用函数 简洁:目前没怎么在Shell 脚本中使用过函数,哈哈,不过,以后可能会用。就像java8的函数式编程,以后获取会用吧,行吧,那咱们简单的看一下具体的使用 Shell函数格式 linux ...

AHUSKY ⋅ 今天 ⋅ 0

单片机软件定时器

之前写了一个软件定时器,发现不够优化,和友好,现在重写了 soft_timer.h #ifndef _SOFT_TIMER_H_#define _SOFT_TIMER_H_#include "sys.h"typedef void (*timer_callback_function)(vo...

猎人嘻嘻哈哈的 ⋅ 今天 ⋅ 0

好的资料搜说引擎

鸠摩搜书 简介:鸠摩搜书是一个电子书搜索引擎。它汇集了多个网盘和电子书平台的资源,真所谓大而全。而且它还支持筛选txt,pdf,mobi,epub、azw3格式文件。还显示来自不同网站的资源。对了,...

乔三爷 ⋅ 今天 ⋅ 0

Debian下安装PostgreSQL的表分区插件pg_pathman

先安装基础的编译环境 apt-get install build-essential libssl1.0-dev libkrb5-dev 将pg的bin目录加入环境变量,主要是要使用 pg_config export PATH=$PATH:/usr/lib/postgresql/10/bin 进......

玛雅牛 ⋅ 今天 ⋅ 0

inno安装

#define MyAppName "HoldChipEngin" #define MyAppVersion "1.0" #define MyAppPublisher "Hold Chip, Inc." #define MyAppURL "http://www.holdchip.com/" #define MyAppExeName "HoldChipE......

backtrackx ⋅ 今天 ⋅ 0

Linux(CentOS)下配置php运行环境及nginx解析php

【part1:搭建php环境】 1.选在自己需要安装的安装包版本,wget命令下载到服务器响应目录 http://php.net/releases/ 2.解压安装包 tar zxf php-x.x.x 3.cd到解压目录执行如下操作 cd ../php-...

硅谷课堂 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部