1. 程式人生 > >使用ehcache將資料持久化到硬碟,重啟伺服器之後依然可用

使用ehcache將資料持久化到硬碟,重啟伺服器之後依然可用

    在借鑑了網上很多例子之後在這裡整理一下, ehcache版本為2.6.9,

  •      這裡給下參考配置:有些註釋我直接從網上覆制的。。
  • <ehcache>
       <!-- 
             磁碟儲存:將快取中暫時不使用的物件,轉移到硬碟,類似於Windows系統的虛擬記憶體
              path:指定在硬碟上儲存物件的路徑
       -->
       <diskStore path="C:\ehcache" />
        
       <!-- 
            defaultCache:預設的快取配置資訊,如果不加特殊說明,則所有物件按照此配置項處理
            maxElementsInMemory:設定了快取的上限,最多儲存多少個記錄物件
            eternal:代表物件是否永不過期
            overflowToDisk:當記憶體中Element數量達到maxElementsInMemory時,Ehcache將會Element寫到磁碟中
       -->
       <defaultCache
          maxElementsInMemory="100"
          eternal="true"
          overflowToDisk="true"/>
     
        <!-- 
            maxElementsInMemory設定成1,overflowToDisk設定成true,只要有一個快取元素,就直接存到硬碟上去
            eternal設定成true,代表物件永久有效
            maxElementsOnDisk設定成0 表示硬碟中最大快取物件數無限大
            diskPersistent設定成true表示快取虛擬機器重啟期資料 
         -->
         <cache name="f"
               maxElementsInMemory="1"
               eternal="true"
               overflowToDisk="true"
               maxElementsOnDisk="0"
               diskPersistent="true"
        />
    
        <cache name="f-temp"
               maxElementsInMemory="1"
               eternal="false"
               timeToIdleSeconds="0"
               timeToLiveSeconds="120"
               maxElementsOnDisk="0"
               overflowToDisk="true"
               diskPersistent="true"
        />
    
     
    </ehcache>

    web.xml新增監聽器

  • 
      <listener>
        <listener-class>net.sf.ehcache.constructs.web.ShutdownListener</listener-class>
      </listener>
    

    使用cache.flush(),每次get、put之後呼叫cache.flush() ,這樣ehcache 會將索引(xxx.index)回寫到磁碟。這樣就不用擔心程式是否非正常退出導致快取丟失了。