Skip to content

Policy zh CN

tydhot edited this page Feb 25, 2021 · 2 revisions

策略的选择在缓存的构造中是灵活可选的。在程序的运行过程中,这些策略的配置也可以被检查并修改。策略通过Optional表明当前缓存是否支持其该策略。

基于容量

cache.policy().eviction().ifPresent(eviction -> {
  eviction.setMaximum(2 * eviction.getMaximum());
});

如果当前缓存容量是受最大权重所限制的,那么可以通过weightedSize()方法获得当前缓存。这与Cache.estimatedSize()区别在于,Cache.estimatedSize()将会返回当前缓存中存在的元素个数。

缓存的最大容量或者总权重可以通过getMaximum() 得到并且可以通过setMaximum(long)方法对其进行调整。缓存将会不断驱逐元素,直到符合最新的阈值。

如果想要得到缓存中最有可能被保留和最有可能被驱逐的元素子集,可以通过 hottest(int)coldest(int) 方法获得以上两个子集的元素快照。

基于时间

cache.policy().expireAfterAccess().ifPresent(expiration -> ...);
cache.policy().expireAfterWrite().ifPresent(expiration -> ...);
cache.policy().expireVariably().ifPresent(expiration -> ...);
cache.policy().refreshAfterWrite().ifPresent(refresh -> ...);

ageOf(key, TimeUnit)方法提供了查看缓存元素在expireAfterAccessexpireAfterWrite或者 refreshAfterWrite 策略下的空闲时间的途径。缓存中的元素最大可持续时间可以通过getExpiresAfter(TimeUnit)方法获取,并且可以通过setExpiresAfter(long, TimeUnit)方法来进行调整。

如果需要查看最接近保留或者最接近过期的元素子集,那么需要调用 youngest(int)oldest(int)方法来得到以上两个子集的元素快照。