[英]Is there a way to configure ehcache to only cache some numbers of elements in time order?
我当前的配置如下,我打算最多缓存30个元素,并在数量大于30时逐出最旧的元素:
<ehcache>
<diskStore path="/path/to/store/"></diskStore>
<cache name="myCache"
eternal="false"
maxEntriesLocalHeap="30"
maxEntriesLocalDisk="30"
memoryStoreEvictionPolicy="FIFO">
<persistence strategy="localTempSwap"/>
</cache>
</ehcache>
我还有另一个计划的作业,该作业每分钟运行一次,以将新元素放入缓存。 因此,我希望在最近30分钟内仅能获得30个元素。 但是到期/撤离与预期的不同。 仍然保留了一些非常古老的元素,而最近30分钟内的某些元素却被意外逐出。 我有什么想念的吗?
我已经阅读了ehcache中与到期/收回相关的文档,但没有发现任何线索。 希望有人可以帮助:)
顺便说一句,ehcache版本是2.6.6
Ehcache驱逐策略始终在其中具有一定程度的启发式。 例如,逐出策略未应用于高速缓存的整个填充,这对于大型高速缓存而言代价太高,而仅适用于样本。
因此,与您的要求相比,您得到的结果不准确。
现在,鉴于您要保留的元素数量有限, LinkedHashMap
听起来是一个不错的选择,尽管对于多线程访问来说并不安全。
感谢@Louis的回答和建议。
在ehcache doc中,我了解到memoryStoreEvictionPolicy
仅用于memory store ,而在我的情况下使用磁盘存储。 而且,默认情况下,磁盘存储的逐出策略是LFU且不可配置 。
在Ehcache中,MemoryStore的大小可能受到限制(有关更多信息,请参见如何调整缓存大小)。 当商店装满时,将逐出元素。 Ehcache中的逐出算法确定逐出哪些元素。 默认值为LRU。
... DiskStore逐出算法不可配置。 它使用LFU。
因此,为了达到我的期望,我更改为仅使用内存存储,因为磁盘存储的当前持久性策略不可重新启动(localTempswap),这与使用内存存储等效。 最终配置如下:
<cache name="myCache"
eternal="false"
maxEntriesLocalHeap="30"
memoryStoreEvictionPolicy="FIFO">
</cache>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.