📉
caffeine
  • 首页
  • 添加
  • 驱逐
  • 移除
  • 刷新
  • Writer
  • 统计
  • 规范
  • 清理
  • 策略
  • 测试
  • Faq
  • 扩展
    • 模拟器
    • JCache
    • Guava
  • 性能
    • 设计
    • 效率
    • 基准测试
    • 内存开销
  • 开发线路图
由 GitBook 提供支持
在本页
  • 基于容量
  • 基于时间

这有帮助吗?

策略

上一页清理下一页测试

最后更新于4年前

这有帮助吗?

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

基于容量

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(expiration -> ...);

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

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

[1]:

https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html