LoadingCache的使用

好久没水

Posted by donlv1997 on June 10, 2022

hit count image

生成一个LoadingCache对象

 
  LoadingCache userCache = CacheBuilder.newBuilder()
                .maximumSize(10000))//设置缓存上线
                .expireAfterAccess(10, TimeUnit.MINUTES)//设置时间对象没有被读/写访问则对象从内存中删除
                .expireAfterWrite(10, TimeUnit.MINUTES)//设置时间对象没有被写访问则对象从内存中删除
                //移除监听器,缓存项被移除时会触发
                .removalListener(new RemovalListener<String, UserProfile>() {
                    @Override
                    public void onRemoval(RemovalNotification<String, UserProfile> notification) {
                       //逻辑
                        }
                    }
                })
                .recordStats()
                //CacheLoader类 实现自动加载
                .build(new CacheLoader<String, Object>() {
                    @Override
                    public Object load(String key) {
                       // 获取对象
                    }
                });

使用LoadingCache

1) V get(K k): 内部调用getOrLoad(K key)方法,缓存中有对应的值则返回,没有则使用CacheLoader.load()方法 getOrLoad(K key)方法为线程安全方法,内部加锁

2) V getIfPresent(Object key): 缓存中有对应的值则返回,没有则返回NULL

3) long size(): 缓存对象数量

4) put(K key, V value): 直接显示地向缓存中插入值,这会直接覆盖掉已有键之前映射的值。

5) invalidate(Object key): 显式地清除指定key的缓存对象