[头像]
2010-09-23 18:20:41 IST
我的ehcache具有以下配置。
<CacheManager dynamicConfig="true" monitoring="autodetect" name="CacheManager1"
updateCheck="true"> <diskStore path="java.io.tmpdir" /> <defaultCache
clearOnFlush="true" copyOnRead="false" copyOnWrite="false" diskAccessStripes="1"
diskExpiryThreadIntervalSeconds="5" diskPersistent="true" diskSpoolBufferSizeMB="20"
eternal="true" logging="true" maxElementsInMemory="100" maxElementsOnDisk="100"
memoryStoreEvictionPolicy="LRU" name="cache1" overflowToDisk="true" statistics="true"
timeToIdleSeconds="0" timeToLiveSeconds="60" transactionalMode="off"> </defaultCache>
<cache clearOnFlush="true" copyOnRead="false" copyOnWrite="false" diskAccessStripes="1"
diskExpiryThreadIntervalSeconds="5" diskPersistent="true" diskSpoolBufferSizeMB="20"
eternal="true" logging="true" maxElementsInMemory="100" maxElementsOnDisk="100"
memoryStoreEvictionPolicy="LRU" name="cache1" overflowToDisk="true" statistics="true"
timeToIdleSeconds="0" timeToLiveSeconds="60" transactionalMode="off"> </cache>
</CacheManager>
maxElementsInMemoryStore和maxElementsOnDiskStore设置为100。我已经在缓存中放入了150个元素。当我查询MemoryStoreSize和DiskStoreSize时,我得到138和15。我无法理解返回的大小。有人可以解释为什么吗?
最佳答案
我找到了MemoryStoreSize > maxElementsInMemory
here的原因。当超出MemoryStore的大小时,对put()
的进一步调用将导致多余的元素被推送到一个溢出(磁盘假脱机)队列,该队列使用辅助线程异步刷新到磁盘。磁盘假脱机队列默认情况下为300MB,并且仅在已满(或如果高速缓存具有持久性,则在关闭状态)时才刷新。
调用get MemoryStoreSize
返回MemoryStore和磁盘假脱机队列中元素的总和。
某些元素可能同时在队列中和在磁盘上,这说明了为什么两个数字之和不等于150。
关于java - ehcache memorystoresize和diskstoresize,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3784544/