说明:
生成的高速缓存是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()
用例说明:
LoadingCacheloadingCache = 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 () { //指定用于确定条目权重的权重@Overridepublic int weigh(String key, String value) {return 0;}}).build(new CacheLoader () {@Overridepublic String load(String String) {return "111";}});String value = loadingCache.get("1");