现实中,不可能把所有的数据全部放到内存中。您必须决定:什么时候不值得保留缓存条目?guava提供了三种基本类型的数据驱逐:基于缓存对象大小的驱逐、基于时间的驱逐和基于引用的驱逐。
基于缓存对象大小(权重)的驱逐
如果你的缓存对象数量不会增长超过一定的大小,只需使用CacheBuilder.maximumSize(long)。缓存将尝试逐出没有被经常访问的数据。逐出操作会在对象数量接近限制的时候发生。
同时,你可以为不同的对象设置不同的权重,
CacheBuilder.weigher(Weigher)定义缓存对象的权重值方法,
CacheBuilder.maximumWeight(long)定义权重最大值。权重仅仅在创建的时候计算,之后都是静态的值。
public GuavaCache() {
cache = CacheBuilder.newBuilder()
.weigher((String key,GuavaCacheData value) -> value.weight())
.maximumWeight(1000)
.build(new CacheLoader<String, GuavaCacheData>(){
@Override
public GuavaCacheData load(String key) throws ExecutionException {
//获取数据
try {
//这里仅仅模拟获取数据非常慢,不要使用该代码
Thread.sleep(2000L);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();

本文介绍了Java中Guava Cache的三种数据驱逐策略:基于缓存对象大小的驱逐、基于时间的驱逐以及刷新缓存的机制。详细讲解了如何设置最大缓存大小、对象权重、过期时间和刷新间隔,以及在缓存刷新过程中的异常处理策略。
626

被折叠的 条评论
为什么被折叠?



