CacheBuilder作为LoadingCache 与 Cache实例的创建者,具有以下特征: 1、自动载入键值至缓存; 2、当缓存器溢出时,采用最近最少使用原则进行替换。 3、过期规则可基于最后读写时间。 4、设置键值引用级别。 5、元素移出通知。 6、缓存访问统计。 示例: LoadingCache<String, Integer> cache = CacheBuilder.newBuilder() ...
3.1 CacheBuilder 首先,让咱们看看CacheBuilder。这个类真是太棒了,它像个万能工具,帮你构建出各种定制的缓存。想要限制缓存大小?没问题。想要设置过期时间?一样行。它就像乐高积木,可以根据需求搭建出你想要的缓存结构。下面是个示例,展示了如何使用CacheBuilder创建一个简单的缓存:在这段代码中,小黑创建了一个...
CacheBuilder是Guava用于创建LoadingCache、Cache实例的构建类。可以使用下面的方法来创建一个Cache实例。 代码语言:javascript 复制 LoadingCache<String,JsonObject>cacheDemo=CacheBuilder.newBuilder().concurrencyLevel(5).expireAfterAccess(30,TimeUnit.MINUTES).initialCapacity(100maximumSize(5000).recordStats().removalListe...
使用CacheBuilder构建的缓存不会"自动"执行清理和回收工作,也不会在某个缓存项过期后马上清理,也没有诸如此类的清理机制。相反,它会在写操作时顺带做少量的维护工作,或者偶尔在读操作时做——如果写操作实在太少的话。 这样做的原因在于:如果要自动地持续清理缓存,就必须有一个线程,这个线程会和用户操作竞争共享锁。
另外,不同的缓存项有不同的“权重”(weights)——例如,如果你的缓存值,占据完全不同的内存空间,你可以使用CacheBuilder.weigher(Weigher)指定一个权重函数,并且用CacheBuilder.maximumWeight(long)指定最大总重。在权重限定场景中,除了要注意回收也是在重量逼近限定值时就进行了,还要知道重量是在缓存创建时计算的,因此要...
guava cache位于com.google.common.cache包下,核心的类有两个,一个是CacheBuilder,是用来构建缓存的,另一个是Cache,也就是缓存容器,用来存放缓存数据的。 简单用法 下面是guava cache的一个简单示例: //实例化缓存构建器 CacheBuildercacheBuilder=CacheBuilder.newBuilder(); //构建缓存容器 Cache<String,String>cache...
CacheBuilder.newBuilder() // 设置并发级别为 cpu 核心数 .concurrencyLevel(Runtime.getRuntime().availableProcessors()) .build(); 同ConcurrentHashMap 类似 Guava cache 的并发也是通过分离锁实现。在一般情况下,将并发级别设置为服务器 cpu 核心数是一个比较不错的选择。 缓存的初始容量设置 我们在构建缓存时...
如果要规定缓存项的数目不超过固定值,只需使用CacheBuilder.maximumSize(long)。缓存将尝试回收最近没有使用或总体上很少使用的缓存项。——警告:在缓存项的数目达到限定值之前,缓存就可能进行回收操作——通常来说,这种情况发生在缓存项的数目逼近限定值时。
上述代码中,在使用CacheBuilder创建缓存容器的时候,如果在build()方法中传入一个CacheLoader实现类的方式,则最终创建出来的是一个LoadingCache具体类型的Cache容器: 默认情况下,我们需要继承CacheLoader类并实现其load抽象方法即可。 当然,CacheLoader类中还有一些其它的方法,我们也可以选择性的进行覆写来实现自己的自定义诉...
在上面构造缓存器的第一步是构造CacheBuilder,我们来看看CacheBuilder的一些属性: privatestaticfinalintDEFAULT_INITIAL_CAPACITY=16;//用于计算每个Segment中的hashtable的大小privatestaticfinalintDEFAULT_CONCURRENCY_LEVEL=4;//用于计算有几个SegmentprivatestaticfinalintDEFAULT_EXPIRATION_NANOS=0;//默认的缓存过期时间stat...