Guava cache功能整理

说明:
生成的高速缓存是CacheBuilder可序列化的
内存key-value具有concurrentHashMap哈希表的特性,并发安全
默认情况下缓存使用equals方法进行比较,如果创建时指定了weakKeys(),则使用==进行判断相等
同样如果指定softValues或者weakValues时使用==进行判断相等性;
 
超时机制:
当请求maximumSize,maximumWeight,expireAfterWrite,expireAfterAccess,weakKeys,weakValues或softValues中的任何一个时,条目将自动从缓存中逐出。
如果请求maximumSize或maximumWeight,则可以在每次高速缓存修改时逐出条目。
如果请求expireAfterWrite或expireAfterAccess,则可以在每次高速缓存修改,偶尔的高速缓存访​​问或调用时删除条目Cache.cleanUp()。过期的条目可能会被计数Cache.size(),但读取或写入操作将永远不可见。
如果请求weakKeys,weakValues或softValues,则垃圾收集器可以回收缓存中存在的密钥或值。
 
特点:
  • 将数据key,value缓存到Cache中
  • 当Cache中key超过指定数量时,自动删除最先创建的key
  • 根据key创建或者变更的时间,设置超时时间,超时的key自动删除,expireAfterWrite(long, TimeUnit)
  • 根据key最后一次访问的时间,设置超时时间,超时的key自动删除,expireAfterAccess(long, TimeUnit)
  • 显示的清除key,单独使用 Cache.invalidate(key)、批量使用 Cache.invalidateAll(keys)、使用的所有条目 Cache.invalidateAll()
 
用例说明:
LoadingCache<String, String> loadingCache = CacheBuilder.newBuilder()
.maximumSize(5)//指定缓存可能包含的最大条目数,超过此数量会自动清除
.expireAfterWrite(10, TimeUnit.SECONDS)//指定在条目创建后经过固定的持续时间或最近更换其值时,应自动从缓存中删除每个条目
.expireAfterAccess(10,TimeUnit.SECONDS)//指定在条目创建,最近替换其值或上次访问后经过固定持续时间后,应自动从缓存中删除每个条目。
.refreshAfterWrite(10,TimeUnit.SECONDS)//指定在创建条目后经过固定持续时间或最近替换其值时,活动条目有资格进行自动刷新。
.expireAfterAccess(10,TimeUnit.SECONDS)//指定在条目创建,最近替换其值或上次访问后经过固定持续时间后,活动条目有资格进行自动刷新。
.initialCapacity(60)//设置内部哈希表的最小总大小
.concurrencyLevel(10)//指导更新操作中允许的并发性,分段锁数量
.maximumWeight(10L)//指定缓存可能包含的条目的最大权重。
.recordStats()//启用CacheStats缓存操作期间的累积。
.weakKeys()//指定存储在缓存中的每个键是弱引用
.weakValues()//指定存储在缓存中的每个值是弱引用
.softValues()//指定存储在缓存中的每个值是软引用
.weigher(new Weigher<String, String>() {//指定用于确定条目权重的权重
@Override
public int weigh(String key, String value) {
return 0;
}
})
.build(new CacheLoader<String, String>() {
@Override
public String load(String String) {
return "111";
}
});
String value = loadingCache.get("1");

猜你喜欢

转载自www.cnblogs.com/use-D/p/9544915.html