生成一个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的缓存对象