缓存,在我们日常开发中是必不可少的一种解决性能问题的方法。简单的说,cache 就是为了提升系统性能而开辟的一块内存空间。
缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日常开发的很多场合,由于受限于硬盘IO的?
缓存在很多系统和架构中都用广泛的应用,例如:
1.CPU缓存
2.操作系统缓存
3.本地缓存
4.分布式缓存
5.HTTP缓存
6.数据库缓存
等等,可以说在计算机和网络领域,缓存无处不在。可以这么说,只要有硬件性能不对等,涉及到网络传输的地方都会有缓存的身影。
1.生成一个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) {
-
//从SQL或者NoSql 获取对象
-
}
-
});
2.CacheBuilder方法
1) LoadingCache build(CacheLoader loader) : LoadingCache对象创建
-
public <K1 extends K, V1 extends V> LoadingCache<K1, V1> build(
-
CacheLoader<? super K1, V1> loader) {
-
checkWeightWithWeigher();
-
return new LocalCache.LocalLoadingCache<K1, V1>(this, loader);
-
}
2)CacheBuilder.maximumSize(long size)方法:配置缓存数量上限,快达到上限或达到上限,处理了时间最长没被访问过的对象或者根据配置的被释放的对象
3)expireAfterAccess(long, TimeUnit):缓存项在给定时间内没有被读/写访问,则回收。请注意这种缓