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