文档章节

使用spring3 cacheManager配置Guava Cache和Redis Cache

孟飞阳
 孟飞阳
发布于 2017/02/16 14:27
字数 469
阅读 193
收藏 1
点赞 0
评论 0

简单两步,利用spring的cacheManager配置Guava Cache,同时还可以配置以redis实现的cache。使用时通过配置自由切换不同的cache实现。

1、创建配置类:

/** 
 * Cache配置類,用于缓存方法返回的数据 
 * @author XuJijun 
 * 
 */  
@Configuration  
@EnableCaching  
public class CacheConfig {  
  
    public static final int DEFAULT_MAXSIZE = 50000;  
    public static final int DEFAULT_TTL = 10;  
  
    /** 
     * 定義cache名稱、超時時長(秒)、最大size 
     * 每个cache缺省10秒超时、最多缓存50000条数据,需要修改可以在构造方法的参数中指定。 
     */  
    public enum Caches{  
        messageContent(8640000),  
        getSomeData,  
        qiniuUpToken(1800, 1),  
  
        getCommonAds(60),  
        getAndAssembleAreaSpecificAds(60);  
  
        Caches() {  
        }  
  
        Caches(int ttl) {  
            this.ttl = ttl;  
        }  
  
        Caches(int ttl, int maxSize) {  
            this.ttl = ttl;  
            this.maxSize = maxSize;  
        }  
  
        private int maxSize=DEFAULT_MAXSIZE;    //最大數量  
        private int ttl=DEFAULT_TTL;        //过期时间(秒)  
  
        public int getMaxSize() {  
            return maxSize;  
        }  
        public void setMaxSize(int maxSize) {  
            this.maxSize = maxSize;  
        }  
        public int getTtl() {  
            return ttl;  
        }  
        public void setTtl(int ttl) {  
            this.ttl = ttl;  
        }  
    }  
  
    /** 
     * 创建基于guava的Cache Manager 
     * @return 
     */  
    @Bean  
    @Primary  
    public CacheManager guavaCacheManager() {  
        SimpleCacheManager cacheManager = new SimpleCacheManager();  
  
        //把各个cache注册到cacheManager中,GuavaCache实现了org.springframework.cache.Cache接口  
        ArrayList<GuavaCache> caches = new ArrayList<GuavaCache>();  
        for(Caches c : Caches.values()){  
            caches.add(new GuavaCache(c.name(), CacheBuilder.newBuilder().recordStats().expireAfterWrite(c.getTtl(), TimeUnit.SECONDS).maximumSize(c.getMaxSize()).build()));  
        }  
        cacheManager.setCaches(caches);  
        return cacheManager;  
    }  
  
    @Autowired  
    private JedisCluster jedisCluster;  
  
    /** 
     * 创建基于redis的Cache Manager 
     * @return 
     */  
    @Bean  
    public CacheManager redisCacheManager() {  
        JedisClusterCacheManager cacheManager = new JedisClusterCacheManager(jedisCluster);  
  
        ArrayList<JedisClusterCache> caches = new ArrayList<JedisClusterCache>();  
  
        //把各个cache注册到cacheManager中,JedisClusterCache实现了org.springframework.cache.Cache接口  
        for(Caches c: Caches.values()){  
            caches.add(new JedisClusterCache(c.name(), jedisCluster, c.getTtl()));  
        }  
        cacheManager.setCaches(caches);  
        return cacheManager;  
    }  
}  

2、使用:

/** 
 * 根据模块获取有效的、通用的广告列表 
 *  
 * @author XuJijun 
 * @param mType 广告模块 
 * @return 
 */  
@Override  
@Cacheable("getCommonAds")  
public List<Advert> getCommonAds(int mType) {  
    return advertDAO.getAdvertsByModuleType(mType);  
} 

注:@Cacheable注解里面指定了value=cacheName,这个注解的其他主要参数:

  • cacheManager:指定由哪个cacheManager(比如可以指定为"redisCacheManager")来管理这个cache,不指定的话使用spring注解@Primary的那个;
  • key:指定key的SpEL表达式,不指定的话,使用方法的参数作为key;
  • GuavaCache需要依赖Guava的jar包:
  • <dependency>  
        <groupId>com.google.guava</groupId>  
        <artifactId>guava</artifactId>  
        <version>19.0</version>  
    </dependency>  

     

 

本文转载自:http://blog.csdn.net/clementad/article/details/51250472

共有 人打赏支持
孟飞阳
粉丝 202
博文 921
码字总数 537449
作品 5
朝阳
个人站长
SpringBoot同时集成Guava和Redis作为缓存

参考网页 http://tramp.cincout.cn/2017/10/31/spring-boot-2017-10-31-spring-boot-multi-cache-manager/ 为什么要混用缓存(本地缓存和分布式缓存)? 这个要看项目实际需要。一种场景就是...

karma123
07/04
0
0
Java 的协同缓存框架 - coca

coca = co + ca =================================== Co-Cache 协同缓存框架 ## 核心概述 coca-ca 实现多级缓存调度策略,使用方式如下: - 继承Ca,实现不同的缓存操作,可参考CaGuava、CaRed...

戴忠
2017/10/30
0
0
深入理解分布式系统中的缓存架构(上)

本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景。 1 缓存概述 缓存概述 2 缓存的分类 缓存主要分为以下四类 缓存的分类 2.1 CDN缓存 基本介绍 CDN(Content Delive...

Java填坑之路
07/13
0
0
Java 缓存系统 - JetCache

JetCache 是一个基于 Java 的缓存系统封装,提供统一的 API 和注解来简化缓存的使用。当前有四个实现,、(此部分未开源)、 (in memory) 和一个简易的 (in memory)。 主要特性: 通过统一的...

areyouok
01/23
0
0
Jboot v1.2.3 新增 J2Cache 适配及限流功能

Jboot是一个基于JFinal 和 undertow开发的微服务框架。提供了AOP、RPC、分布式缓存、限流、降级、熔断、统一配置中心、Opentracing数据追踪、metrics数据监控、分布式session、代码生成器、s...

michaely
01/04
584
7
Google Guava 在实际场景中的应用封装

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

glmapper
06/25
0
0
guava cache与spring集成

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

爪哇小贩
2016/11/20
973
0
Guava 源码分析之Cache的实现原理

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

crossoverJie
01/20
0
0
Java Cache系列之Guava Cache实现详解

Guava作为Google开源出来的工具库,Google自己对Guava的描述:The Guava project contains several of Google's core libraries that we rely on in our Java-based projects: collections, ......

rich_xu
2013/11/13
0
5
阿里巴巴开源的通用缓存访问框架JetCache介绍

JetCache是由阿里巴巴开源的通用缓存访问框架,如果你对Spring Cache很熟悉的话,请一定花一点时间了解一下JetCache,它更好用。 JetCache提供的核心能力包括: 提供统一的,类似jsr-107风格...

黄理
04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
12分钟前
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部