番石榴缓存:cacheloader vs get(k,callable)

cod*_*der 5 java caching guava

我是Guava缓存的新手,在阅读文档https://code.google.com/p/guava-libraries/wiki/CachesExplained后我很困惑 .

使用缓存加载器和加载方法之间的区别是使用带有可调用get(K,Callable)的get方法加载密钥(如果缓存中不存在).

对我来说,它们都用于加载密钥的相同目的.无法从the doc doc中找到两者之间的差异.有人可以帮忙吗

Ben*_*nes 5

a 的主要优点LoadingCache是它促进通过缓存执行计算,而不是经常使用的快速获取然后计算然后放置的方法。它向开发人员传达如何使用缓存。

功能方面 aLoadingCache提供批量加载 ( getAll)、非阻塞刷新和一些简洁性,例如getUnchecked. 刷新可以通过构建阶段显式地执行refresh(key)或隐式地使用。refreshAfterWrite

当计算很复杂时,最好将逻辑移到它自己的类中。通过扩展 aCacheLoader而不是 a Callable,可以更好地传达意图。

性能方面没有太大区别。内部会在每次调用时get(key, callable)创建一个CacheLoader适应 a 的装饰器load,因此会创建一个 eden 空间对象。

在我的 Java 8 重写Caffeine中,有一些额外的选项。AnAsyncLoadingCache提供了类似的 API,但返回一个CompletableFuture. Map如果您需要更直接的控制,则支持新的计算方法作为原子操作。

一般来说,更喜欢使用 a,LoadingCache因为它具有与团队其他成员沟通的特性。其他一切都是肉汁。