Guava 本地缓存CacheBuilder使用详解

时间:2025-02-15 21:05:36

CacheBuilder

使用CacheBuilder可以构建出两种类型的cache,LoadingCache和Cache:
它们如下特点(非必选,可配置):

  1. 自动装载实体到内存
  2. LRU替换策略(默认,不可修改)
  3. 基于时间的失效策略,可按最新访问或者最近写入计算时间
  4. key自动包裹(wrapped)在弱引用
  5. value自动包裹在弱引用或者软引用
  6. 换出或删除数据时有通知
  7. 访问缓存统计
用法

举例

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,根据写入的时间开始计算和根据上次访问的时间开始计算

注:如果是基于访问时间,如果设置时间比较长,然后一直有访问,则一直不失效