使用spring cacheManager配置Guava Cache和Redis Cache

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


1、创建配置类:

/** * Cache配置類,用于缓存方法返回的数据 * @author XuJijun * */@Configuration@EnableCachingpublic 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;

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部