CacheBuilder
使用CacheBuilder可以构建出两种类型的cache,LoadingCache和Cache:
它们如下特点(非必选,可配置):
- 自动装载实体到内存
- LRU替换策略(默认,不可修改)
- 基于时间的失效策略,可按最新访问或者最近写入计算时间
- key自动包裹(wrapped)在弱引用
- value自动包裹在弱引用或者软引用
- 换出或删除数据时有通知
- 访问缓存统计
用法
举例
LoadingCache<Key, Graph> graphs = ()
.maximumSize(10000)
.expireAfterWrite(10, )
.removalListener(MY_LISTENER)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
}
);
创建一个大小为10000的LoadingCache,MY_LISTENER处理删除数据时通知。
LoadingCache的底层实现:类似ConcurrentHashMap哈希表
- 基于时间的失效策略配置有expireAfterWrite和expireAfterAccess,根据写入的时间开始计算和根据上次访问的时间开始计算
注:如果是基于访问时间,如果设置时间比较长,然后一直有访问,则一直不失效