【发布时间】:2019-08-24 20:20:19
【问题描述】:
使用 Ehcache 3,如果我有一个持久缓存,这是否意味着即使堆/堆外缓存已满,所有内容都将写入磁盘缓存?
我有这个
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();
所以我已经过期了,但是我已经指定了一个磁盘缓存,因为通常内存缓存是不够的,我已经指定它是持久的,因为如果数据被写入磁盘,它可能对后续运行很有用应用程序。
但是,有时应用程序的使用方式可能会导致堆/堆外堆未完全使用,因此我不希望应用程序仅仅因为我已将其标记为持久性而浪费时间将数据写入磁盘。毕竟我使用缓存的原因是为了提高性能。
【问题讨论】:
-
操作系统会将其刷新到磁盘,应用程序不会浪费时间。
-
但有时我的应用程序在慢速 1 cpu 机器上运行,所以如果操作系统必须做额外的事情会减慢速度,所以澄清一下它会将所有内容写入磁盘?
-
我不是这方面的专家,但也许只有 1 个 cpu,写入磁盘的高 I/O 负载会长时间阻塞您的线程。可能很难解决..