我遇到了 ehcache 的问题,我已将缓存设置为永恒,并且我正在逐个反弹 JVM 的"没有停机时间",这实际上并没有清除我的 ehcache 并重新加载新对象。
<cache name="SampleServerStartupCache" maxElementsInMemory="10000" eternal="true" overflowToDisk="true" maxElementsOnDisk="10000000"
diskPersistent="false" memoryStoreEvictionPolicy="LRU" diskExpiryThreadIntervalSeconds="120" />
我相信当缓存设置为 eternal="true" 时,JVM 的重新启动应该刷新并加载新对象。但是,为了避免停机,我们正在一个接一个地弹跳JVM,这会在干净重启之间产生差异吗?
eternal="true"
仅表示元素不会从缓存中过期。它对 JVM 重新启动期间元素的生存期没有影响。
如果您希望缓存元素的持久性,则需要设置 diskPersistent="true"
,在配置文件中定义磁盘路径。在弹跳 JVM 时,还必须正确关闭CacheManager
,否则保存在磁盘上的数据可能会在重新启动时被丢弃。
在评论后添加
在您的场景中,重新启动 JVM 将清除其缓存。但是,只有在应用程序放入缓存时,才会加载缓存。Ehcache 未配置为执行预加载。如果这是您想要的,请查看有关 BootstrapCacheLoader
的文档。