Guava 缓存:缓存加载器与 get(k,callable)
Guava cache : cacheloader vs get(k,callable)
我是Guava缓存新手,看了文档一头雾水
https://code.google.com/p/guava-libraries/wiki/CachesExplained.
使用带有加载方法的缓存加载器与使用带有可调用 get(K, Callable) 的 get 方法来加载缓存中不存在的键之间的区别是什么。
对我来说,它们都用于加载密钥的相同目的。无法从 w 文档中找到两者之间的差异。
有人可以帮忙吗
如果您希望使用相同的方法不断计算所有值,使用 CacheLoader
可能是更好的主意。
比方说,如果您有一个缓存方法来创建 class 的单独实现的新实例,并且您不想使用 switch
或 if
链, 你会使用 get(Object, Callable)
.
您最好使用加载方法,因为它不需要每个 get
.
实例化一个新的 Callable
LoadingCache
的主要优点是它促进了通过缓存执行计算,而不是经常使用的活泼的获取然后计算然后放置方法。它向开发人员传达应该如何使用缓存。
在功能方面 LoadingCache
提供批量加载 (getAll
)、非阻塞刷新和一些简洁性,例如 getUnchecked
。刷新可以通过 refresh(key)
显式执行,也可以在构建阶段使用 refreshAfterWrite
隐式执行。
当计算很复杂时,最好将逻辑移到它自己的 class 中。通过扩展 CacheLoader
而不是 Callable
它可以更好地传达意图。
在性能方面没有太大区别。 get(key, callable)
在每次调用时都会在内部创建装饰器 CacheLoader
以适应 load
,因此会创建一个伊甸园 space 对象。
在我的 Java 8 重写 Caffeine 中,有一些额外的选项。 AsyncLoadingCache
提供类似的 API 但 returns 提供 CompletableFuture
。如果您需要更直接的控制,新的 Map
计算方法作为原子操作得到支持。
一般来说,更喜欢使用 LoadingCache
因为它与团队其他成员的交流特性。其他都是肉汁。
我是Guava缓存新手,看了文档一头雾水 https://code.google.com/p/guava-libraries/wiki/CachesExplained.
使用带有加载方法的缓存加载器与使用带有可调用 get(K, Callable) 的 get 方法来加载缓存中不存在的键之间的区别是什么。
对我来说,它们都用于加载密钥的相同目的。无法从 w 文档中找到两者之间的差异。 有人可以帮忙吗
如果您希望使用相同的方法不断计算所有值,使用 CacheLoader
可能是更好的主意。
比方说,如果您有一个缓存方法来创建 class 的单独实现的新实例,并且您不想使用 switch
或 if
链, 你会使用 get(Object, Callable)
.
您最好使用加载方法,因为它不需要每个 get
.
Callable
LoadingCache
的主要优点是它促进了通过缓存执行计算,而不是经常使用的活泼的获取然后计算然后放置方法。它向开发人员传达应该如何使用缓存。
在功能方面 LoadingCache
提供批量加载 (getAll
)、非阻塞刷新和一些简洁性,例如 getUnchecked
。刷新可以通过 refresh(key)
显式执行,也可以在构建阶段使用 refreshAfterWrite
隐式执行。
当计算很复杂时,最好将逻辑移到它自己的 class 中。通过扩展 CacheLoader
而不是 Callable
它可以更好地传达意图。
在性能方面没有太大区别。 get(key, callable)
在每次调用时都会在内部创建装饰器 CacheLoader
以适应 load
,因此会创建一个伊甸园 space 对象。
在我的 Java 8 重写 Caffeine 中,有一些额外的选项。 AsyncLoadingCache
提供类似的 API 但 returns 提供 CompletableFuture
。如果您需要更直接的控制,新的 Map
计算方法作为原子操作得到支持。
一般来说,更喜欢使用 LoadingCache
因为它与团队其他成员的交流特性。其他都是肉汁。