我对元素的“overflowToDisk”属性有疑问吗?
1)我在此URL读到:
overflowToDisk设置当内存存储达到最大限制时元素是否可以溢出到磁盘。
上面的“内存”是指为运行EHCACHE的Java进程分配的JVM内存,还是有任何参数指定Cache内存大小?
2)当运行EHCACHE的poces由于某种原因终止时,该磁盘是否被清除并且缓存中的所有内容都消失了?
答案 0 :(得分:11)
当内存存储中的元素超过 maxElementsInMemory 时,元素会开始溢出到磁盘。以下示例创建一个缓存,在内存中存储1000个元素,如果需要存储更多元素,则在磁盘上最多可存储10000个元素:
<cache name="cacheName"
maxElementsInMemory="1000"
maxElementsOnDisk="10000"
overflowToDisk="true"
timeToIdleSeconds="..."
timeToLiveSeconds="...">
</cache>
对于第二个问题,请查看 diskPersistent 参数。如果设置为true,Ehcache将在您停止JVM时将数据保存在磁盘上。以下示例演示了这一点:
<cache name="cacheName"
maxElementsInMemory="1000"
maxElementsOnDisk="10000"
overflowToDisk="true"
diskPersistent="true"
timeToIdleSeconds="..."
timeToLiveSeconds="...">
</cache>
答案 1 :(得分:3)
从Ehcache 2.6开始,存储模型不再是溢出模型,而是分层存储模型。在分层存储模型中,所有数据始终存在于最低层中。项目将根据其 hotness 显示在较高层中。
开源Ehcache的可能层是:
根据定义,高层的延迟较低,但容量较低层低。
因此,对于使用overflowToDisk
配置的开源缓存,所有数据将始终位于磁盘层内。它会将密钥存储在内存中,将数据存储在磁盘上。
从this other question复制的答案。