Guava---缓存

来源:互联网 发布:大数据产业发展对策 编辑:程序博客网 时间:2024/05/22 19:43

google guava框架提供了内存缓存的功能,可以很方便的缓存对象,设置生命周期, 及缓存对象的弱引用 强应用 软引用等.

所在包:package com.google.common.cache;

//LoadingCache在缓存项不存在时可以自动加载缓存private LoadingCache<Key,String> dictCache = CacheBuilder.newBuilder()            .maximumSize(200)//设置缓存最大容量为200,超过200之后就会按照LRU最近虽少使用算法来移除缓存项            .expireAfterWrite(30, TimeUnit.MINUTES)//设置写缓存后30分钟过期,过期后会触发removalListener            .concurrencyLevel(4)//并发级别为4,并发级别是指可以同时写缓存的线程数            .removalListener(new RemovalListener<Object, Object>() {//这段代码可以移除                @Override                public void onRemoval(RemovalNotification<Object, Object> notification) {                    LOG.debug("");                }            })            //build方法中可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存                .build(            .build(new CacheLoader<Key,String>() {                @Override                public String load(Key key) throws Exception {                    return loadFromDb(key);                }            });

guava缓存过期时间分为两种,一种是从写入时开始计时,一种是从最后访问时间开始计时,而且guava缓存的过期时间是设置到整个一组缓存上的;这和EHCache,redis,memcached等不同,这些缓存系统设置都将缓存时间设置到了单个缓存上。

guava缓存设计成了一组对象一个缓存实例,这样做的好处是一组对象设置一组缓存策略,你可以根据不同的业务来设置不同的缓存策略,包括弱引用,软引用,过期时间,最大项数等。另外一点好处是你可以根据不同的组来统计缓存的命中率,这样更有意义一些。

这样做也是有缺点的,缺点是首先是每个缓存组都需要声明不同的缓存实例,具体到业务程序中可能就是每个业务对象一个缓存了。这样就把不同的业务缓存分散到不同的业务系统中了,不太好管理。

参考文献:
使用google guava做内存缓存

0 0