【问题标题】:When overFlowToDisk gets activated in EHCACHE?在 EHCACHE 中何时激活 overFlowToDisk?
【发布时间】:2011-04-08 09:23:57
【问题描述】:
我对元素的“overflowToDisk”属性有一些疑问?
1) 我在URL 看到:
overflowToDisk 设置当内存存储达到最大限制时元素是否可以溢出到磁盘。
上面的“Memory”是指为运行EHCACHE的Java进程分配的JVM内存,还是有参数指定Cache内存大小?
2)当运行EHCACHE的poces由于某种原因终止时,是否该磁盘被清除并且缓存中的所有内容都消失了?
【问题讨论】:
标签:
caching
ehcache
second-level-cache
【解决方案1】:
当内存存储中的元素超过 maxElementsInMemory 时,元素开始溢出到磁盘。以下示例创建了一个缓存,可在内存中存储 1000 个元素,如果需要存储更多,磁盘上最多可存储 10000 个:
<cache name="cacheName"
maxElementsInMemory="1000"
maxElementsOnDisk="10000"
overflowToDisk="true"
timeToIdleSeconds="..."
timeToLiveSeconds="...">
</cache>
对于第二个问题,请查看 diskPersistent 参数。如果设置为 true,当您停止 JVM 时,Ehcache 会将您的数据保存在磁盘上。以下示例演示了这一点:
<cache name="cacheName"
maxElementsInMemory="1000"
maxElementsOnDisk="10000"
overflowToDisk="true"
diskPersistent="true"
timeToIdleSeconds="..."
timeToLiveSeconds="...">
</cache>
【解决方案2】:
从 Ehcache 2.6 开始,存储模型不再是溢出模型,而是分层模型。在分层存储模型中,所有数据将始终存在于最低层中。项目将根据其热度出现在更高的等级中。
开源 Ehcache 的可能层是:
根据定义,高层的延迟较低,但容量低于较低的层。
因此,对于配置了overflowToDisk 的开源缓存,所有数据将始终位于磁盘层内。它将密钥存储在内存中,数据存储在磁盘中。
从this other question复制答案。