我们正在使用ehcache 2.10.1并具有以下配置(通过MBeans报告):
我们实际上通过以下方式设置存储空间大小:
cacheManagerConfig.setMaxBytesLocalDisk(1024 * 1024 * 1024); cacheManagerConfig.setMaxBytesLocalHeap(1024 * 1024 * 1024);
我们意识到并非所有元素都从缓存中逐出(通过diskExpiryThread或手动调用cache.evictExpiredElements()),但我们非常依赖缓存逐出侦听器来执行一些清理任务。然而,驱逐发生在“获取”上。
我们在日志中进一步了解
DEBUG net.sf.ehcache.store.disk.Segment - 故障从堆中删除-208
DEBUG net.sf.ehcache.store.disk.Segment - 故障在磁盘上添加了293
在evict()的Segment.java中,我看到了一段代码:
if (e != null && !e.faulted.get()) {
evictedElement = decode(e.element);
}
由于元素出现故障evictedElement
保持为空并且不会发生驱逐。
查看驱逐的源代码,我看到TODO告诉代码应该被重写或清理。
现在我很好奇它是否是某种错误,或者我们错误地设置了缓存?
由于
UPD :从用户的角度来看,我很好奇为什么在调用CacheEventListenerAdapter
时没有调用cache.evictExpiredElements()
的方法