在 EhCache3 中,持久缓存意味着数据总是必须写入磁盘缓存
In EhCache3 does a persistent cache mean that data always has to be written to the disk cache
对于 Ehcache 3,如果我有一个持久缓存,这是否意味着即使 heap/offheap 缓存是否已满,所有内容都将写入磁盘缓存?
即我有这个
PersistentCacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(new File(Platform.getPlatformDatabaseFolder(), RELEASE_CACHE)))
.withCache(RELEASE_CACHE,
CacheConfigurationBuilder.newCacheConfigurationBuilder(
String.class,
String.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(100, EntryUnit.ENTRIES)
.offheap(10, MemoryUnit.MB)
.disk(20, MemoryUnit.MB, true)))
.build();
所以我正在尝试这个但是我已经指定了一个磁盘缓存因为通常内存缓存是不够的,我已经指定它是持久的因为如果数据被写入磁盘它可能对后续有用应用程序的运行。
但是,有时应用程序的使用方式可能会导致 heap/offheap 没有被完全使用,因此我不希望应用程序仅仅因为我已经标记就浪费时间写入磁盘作为执着。毕竟我使用缓存的原因是为了提高性能。
与documented一样,只要您在 Ehcache 中有多个层,最低层(在您的情况下为磁盘)总是看到缓存的 put
,而更高层只是无效(offheap 和堆在你的情况下)。在 get
上,该值被拉入最高层(在您的情况下为堆)以进行快速后续访问。如果这导致从堆中逐出,则将逐出的值向下推到堆外,并且在级联中,这可能导致从堆外逐出到磁盘。
请注意,上述系统已完成,以便性能保持可预测性,而不是在层满时突然下降。
所以在 Ehcache 中拥有多层是有代价的。根据您的用例,激活较少的分层选项可能会更好。与缓存一样:测量和适应。
对于 Ehcache 3,如果我有一个持久缓存,这是否意味着即使 heap/offheap 缓存是否已满,所有内容都将写入磁盘缓存?
即我有这个
PersistentCacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(new File(Platform.getPlatformDatabaseFolder(), RELEASE_CACHE)))
.withCache(RELEASE_CACHE,
CacheConfigurationBuilder.newCacheConfigurationBuilder(
String.class,
String.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(100, EntryUnit.ENTRIES)
.offheap(10, MemoryUnit.MB)
.disk(20, MemoryUnit.MB, true)))
.build();
所以我正在尝试这个但是我已经指定了一个磁盘缓存因为通常内存缓存是不够的,我已经指定它是持久的因为如果数据被写入磁盘它可能对后续有用应用程序的运行。
但是,有时应用程序的使用方式可能会导致 heap/offheap 没有被完全使用,因此我不希望应用程序仅仅因为我已经标记就浪费时间写入磁盘作为执着。毕竟我使用缓存的原因是为了提高性能。
与documented一样,只要您在 Ehcache 中有多个层,最低层(在您的情况下为磁盘)总是看到缓存的 put
,而更高层只是无效(offheap 和堆在你的情况下)。在 get
上,该值被拉入最高层(在您的情况下为堆)以进行快速后续访问。如果这导致从堆中逐出,则将逐出的值向下推到堆外,并且在级联中,这可能导致从堆外逐出到磁盘。
请注意,上述系统已完成,以便性能保持可预测性,而不是在层满时突然下降。
所以在 Ehcache 中拥有多层是有代价的。根据您的用例,激活较少的分层选项可能会更好。与缓存一样:测量和适应。