EhCache - 过期元素不会被驱逐

问题描述 投票:0回答:1

我在 Spring Boot 应用程序中使用 EHCache 2.9,并将缓存配置为在 300 秒(5 分钟)后过期。

当我运行应用程序并第一次请求该元素时,它会被缓存,之后就永远不会过期。 但是,当我执行

@CachePut
时,它会成功更新,然后返回更新的元素。 我的配置有什么问题吗?

这是我的 ehcache.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
    <defaultCache maxElementsInMemory="500" eternal="false"
                  overflowToDisk="false" memoryStoreEvictionPolicy="LFU" />

    <diskStore path="java.io.tempdir"/>

    <cache name="appointments"
           maxElementsInMemory="5000"
           eternal="false"
           timeToIdleSeconds="0"
           timeToLiveSeconds="300"
           overflowToDisk="false"
           memoryStoreEvictionPolicy="LFU" />

</ehcache>

这是我请求缓存的方式:

@Cacheable("appointments")
public List<Event> getEvents(String eventsForUser, Date startDate, Date endDate) throws Exception {

    return fetchEventsFromTheServer(eventsForUser, startDate, endDate);
}

@CachePut("appointments")
public List<Event> refreshEventsCache(String eventsForUser, Date startDate, Date endDate) throws Exception {

    return fetchEventsFromTheServer(eventsForUser, startDate, endDate);
}

有什么建议吗?

java spring spring-boot ehcache spring-cache
1个回答
-1
投票

Flush – 将缓存条目移动到较低层。刷新用于释放资源,同时仍将数据保留在集群中。显示条目 E1 从 L1 堆外存储刷新到 Terracotta 服务器阵列 (TSA)。

Fault – 将缓存条目从较低层复制到较高层。当较高层需要数据但数据不驻留在该层时,就会发生故障。该条目在发生故障后不会从较低层中删除。显示条目 E2 从 TSA 到 L1 堆出现故障。

Eviction – 从集群中删除缓存条目。该条目被删除;它只能从集群外部的源重新加载。条目被逐出以释放资源。条目 E3 仅存在于 L2 磁盘上,显示已从集群中逐出。

过期 – 基于生存时间和空闲时间设置的状态。为了维持缓存性能,过期条目可能不会立即刷新或逐出。条目 E4 显示已过期,但仍在 L1 堆中。

固定 – 强制数据保留在某些层中。固定可以设置在单个条目或整个缓存上,并且必须谨慎使用以避免耗尽堆等资源。 E5 显示固定到 L1 堆。

http://www.ehcache.org/documentation/2.7/configuration/data-life.html

© www.soinside.com 2019 - 2024. All rights reserved.