我在 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);
}
有什么建议吗?
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