我已经通过javax.cache.Cache
了解它的用法和行为。据说,何时使用Java缓存以及它与HashMap的区别?
JCache是一个类似地图的数据结构,它提供了 应用程序数据的临时存储。
JCache和HashMap将元素存储在本地堆内存中,默认情况下没有持久性行为。通过实施自定义CacheLoader
和CacheWriter
我们可以实现持久性。除此之外,何时使用它?
我已经通过javax.cache.Cache
了解它的用法和行为。据说,何时使用Java缓存以及它与HashMap的区别?
JCache是一个类似地图的数据结构,它提供了 应用程序数据的临时存储。
JCache和HashMap将元素存储在本地堆内存中,默认情况下没有持久性行为。通过实施自定义CacheLoader
和CacheWriter
我们可以实现持久性。除此之外,何时使用它?
以下是两个对象之间的五个主要区别。
级与java.util.Map,缓存:
- 不允许null键或值。尝试使用null将导致java.lang.NullPointerException异常
- 提供了在请求的 值不在缓存中时从javax.cache.integration.CacheLoader(通过读取缓存)读取值的能力
- 提供将值写入到一个javax.cache.integration.CacheWriter(写式高速缓存)在创建值 时/更新/从缓存
- 提供观察高速缓存条目的能力除去能力的变化
- 可能捕获并测量运营统计
在地图上允许空键或值取决于实现类。即HashMap允许空键和值,而Hashtable不允许空键或值。 –
@DavidSN当然,谢谢你的细节。 –
缓存通常比一张地图,这不是别的,而是或多或少的简单的数据结构更多的管理逻辑。
一些概念,JCaches可以实现
其中一些是JCache更一般的概念,一些是缓存提供商的具体实现细节
感谢您的好问题。这应该在缓存类本身中得到解答。希望下一个版本能够:https://github.com/jsr107/jsr107spec/issues/365 – cruftex
有谁知道为什么没有提供'CacheLoader'和'CacheWriter'的默认实现(磁盘持久化)? 使用MapDB/RocksDB的自定义实现会导致第三方依赖性,并且可能会出错。 –