EhCache - 过期的元素不会被驱逐

时间:2016-06-08 11:52:53

标签: java spring spring-boot ehcache spring-cache

我在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);
}

有什么建议吗?

1 个答案:

答案 0 :(得分:-1)

Flush - 将缓存条目移动到较低层。刷新用于释放资源,同时仍保留群集中的数据。条目E1显示为从L1堆外存储区刷新到Terracotta服务器阵列(TSA)。     故障 - 将缓存条目从较低层复制到较高层。当更高层需要数据但不驻留在那里时,会发生故障。出现故障后,不会从较低层删除该条目。条目E2显示出从TSA到L1堆的故障。     驱逐 - 从群集中删除缓存条目。该条目已删除;它只能从群集外的源重新加载。参赛作品被驱逐以释放资源。条目E3仅存在于L2磁盘上,显示为从群集中逐出。     到期 - 基于生存时间和空闲时间设置的状态。为了保持缓存性能,可能不会立即刷新或驱逐过期的条目。条目E4显示已过期,但仍在L1堆中。     固定 - 强制数据保留在某些层中。可以在单个条目或整个缓存上设置固定,并且必须谨慎使用以避免耗尽诸如堆之类的资源。 E5显示为固定到L1堆。

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