LoadingCache<Integer, String> loadingCache = Caffeine.newBuilder()
.expireAfterWrite(1, TimeUnit.SECONDS)
.refreshAfterWrite(500, TimeUnit.MILLISECONDS)
.maximumSize(10) // 缓存最大数量
.removalListener((RemovalListener<Integer, String>) (integer, s, removalCause) -> {
System.out.println("key:" + integer + " value:" + s + " cause:"+removalCause);
})
.build(new CacheLoader<Integer, String>() {
@Nullable
@Override
public String load(@NonNull Integer i) throws Exception {
return i.toString();
}
@Override
public Map<Integer, String> loadAll(Iterable<? extends Integer> keys) {
Map<Integer, String> map = new HashMap<>();
for (Integer i : keys) {
map.put(i, i.toString());
}
return map;
}
});
复制代码
LoadingCache<Integer, String> weightLoadingCache = Caffeine.newBuilder()
.maximumWeight(1000)
.weigher((Weigher<Integer, String>) (integer, s) -> integer)
.build(new CacheLoader<Integer, String>() {
@Nullable
@Override
public String load(@NonNull Integer integer) throws Exception {
return null;
}
});
复制代码
caffeine是不缓存null值的,如果在load的时候返回null,caffeine将会把对应的key从缓存中删除,同时,loadAll返回的map里是不可以包含value为null的数据,否则将会报NullPointerException
返回给定的key在LoadingCache中的数据,如果cache中没有该key,将调用CacheLoader的load方法去load数据,如果load不到数据,将返回null。
返回keys中的key的缓存数据,组合成map,如果某个key或某些key在缓存中不存在,将会调用loadAll去load数据,loadAll仍然无法load到数据的key,将不会put到返回的map里。