Guava Cache
Guava Cache
- 单应用、本地缓存
- 依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1-jre</version>
</dependency>
- 示例
import com.google.common.cache.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
public class LocalCache {
public static void main(String[] args) throws ExecutionException {
// LoadingCache 在缓存项不存在时可以自动加载缓存
LoadingCache<String,Object> loadingCache
// CacheBuilder 构造私有,只能通过静态方法 newBuilder()来获取CacheBuilder的实例
= (LoadingCache<String, Object>) CacheBuilder.newBuilder()
// 设置并发级别8;同时写缓存的线程数为8
.concurrencyLevel(8)
// 写缓存后8秒过期
.expireAfterWrite(8, TimeUnit.SECONDS)
// 写缓存后1秒刷新
.refreshAfterWrite(1,TimeUnit.SECONDS)
// 缓存初始容量 10
.initialCapacity(10)
// 缓存最大容量100,超过100之后会按照LRU最近最少使用算法移除缓存项
.maximumSize(100)
// 设置要统计缓存的命中率
.recordStats()
// 缓存的移除通知
.removalListener(new RemovalListener<String, Object>() {
@Override
public void onRemoval(RemovalNotification<String, Object> removalNotification) {
System.out.println(removalNotification.getKey() + "被移除,原因:" + removalNotification.getCause());
}
}).build(
new CacheLoader<String, Object>() {
@Override
public Object load(String key) throws Exception {
System.out.println("缓存不存在时,从数据加载"+key);
// todo 记载数据,返回对应数据
return new Object();
}
}
);
// 第一次读取,会加载数据
for (int i = 0; i < 20; i++) {
Object o = loadingCache.get(i + "");
System.out.println(o);
}
// 第二次读取,直接用
for (int i = 0; i < 20; i++) {
Object o = loadingCache.get(i + "");
System.out.println(o);
}
System.out.println("缓存命中率:"+loadingCache.stats());
}
}
原文地址:https://blog.csdn.net/weixin_46488959/article/details/143837077
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!