2016-06-08 65 views
0

我在Spring Boot應用程序中使用EHCache 2.9,並將緩存配置爲在300秒(5分鐘)後過期。EhCache-已過期的元素不會驅逐

當我運行應用程序並首次請求元素時,它會被緩存,之後永不過期。 但是,當我做@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

您正在使用哪種Spring Boot版本以及如何配置ehcache? –

+0

Spring引導是1.3.5,我在Application.java中添加了@EnableCaching註釋並添加了ehcache.xml來配置它 – Oleg

+0

在類路徑的根目錄中是否有'ehcache.xml'?即在'src/main/resources'中?如果不是,則需要設置'spring.cache.ehcache.config'屬性並將其指向'ehcache.xml'。你也可以刪除ehcache的特定版本標籤,並讓spring啓動管理版本(然後你將得到2.10)。 –

回答

-1

刷新 - 將緩存條目移動到較低層。 Flushing用於釋放資源,同時保持羣集中的數據。條目E1被顯示爲從L1堆外存儲刷新到Terracotta服務器陣列(TSA)。 錯誤 - 將緩存條目從較低層複製到較高層。當需要更高層的數據但不駐留在那裏時發生錯誤。故障後,條目不會從較低層刪除。條目E2被證明是從TSA到L1堆的故障。 驅逐 - 從集羣中移除緩存條目。該條目被刪除;它只能從集羣外部的源重新加載。參賽作品被驅逐以釋放資源。條目E3(僅存在於L2磁盤上)顯示爲從集羣中被逐出。 過期 - 基於生存時間和空閒時間設置的狀態。爲了保持緩存性能,可能不會立即刷新或清除過期條目。條目E4顯示已過期,但仍位於L1堆中。 固定 - 強制數據保留在特定層中。可以在單個條目或整個緩存上設置固定,並且必須謹慎使用以避免耗盡諸如堆等資源。顯示E5固定到L1堆。

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