文档章节

使用spring3 cacheManager配置Guava Cache和Redis Cache

孟飞阳
 孟飞阳
发布于 2017/02/16 14:27
字数 469
阅读 238
收藏 1

简单两步,利用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

共有 人打赏支持
孟飞阳
粉丝 205
博文 964
码字总数 543203
作品 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
分布式缓存系列之guava cache

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

浮云骑士LIN
07/22
0
0
快速掌握:大型分布式系统中的缓存架构

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

技术小能手
08/06
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

没有更多内容

加载失败,请刷新页面

加载更多

使用Newtonsoft将DataTable转Json

使用Newtonsoft将DataTable转Json Newtonsoft提供的将DataTable转成Json: /// <summary> /// DataTable转Json /// </summary> /// <param name="dt"></param> /// <ret......

DemonsI
4分钟前
0
0
centos7安装zookeeper3.4.6

注:zookeeper充当注册中心 下载地址 http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/ 单机 下载完成后,将安装包上传值服务器,解压 tar xvzf zookeeper-3.4.6.tar.gz 进入解...

码代码的小司机
5分钟前
0
0
136. Single Number

136. Single Number 题意:一个数组中所有数字都是两两相同,只有一个数字是单独的,求出这个数字的值。 很简单的题,使用异或就能处理。 异或介绍:bit位上的值不同,异或后,值为1.否则为0...

117
7分钟前
0
0
Hash和HashCode深入理解

目录介绍 1.Hash的作用介绍 1.1 Hash的定义 1.2 Hash函数特性 1.3 Hash的使用场景 2.如何判断两个对象相等 2.1 判断两个字符串 2.2 判断两个int数值 2.3 其他基本类型 3.HashCode深入分析 3....

潇湘剑雨
13分钟前
0
0
ecshop 漏洞如何修复 补丁升级与安全修复详情

目前ecshop漏洞大面积爆发,包括最新版的ecshop 3.0,ecshop 4.0,ecshop2.7.3全系列版本都存在着高危网站漏洞,导致网站被黑,被篡改,被挂马,许多商城系统深受其漏洞的攻击,给商城的运营者...

网站安全
13分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部