繁体   English   中英

是否可以将ehcache配置为仅按时间顺序缓存一些元素?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM