快取初見——EhCache

風之子_發表於2020-10-29

Ehcache簡介

在這裡插入圖片描述

在這裡插入圖片描述

Ehcache簡單使用

首先需要一個配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
    <!-- 指定一個檔案目錄,當EhCache把資料寫到硬碟上時,將把資料寫到這個檔案目錄下 -->
    <diskStore path="java.io.tmpdir"/>

    <!--
    cache元素的屬性:
        name:快取名稱
        maxElementsInMemory:記憶體中最大快取物件數
        maxElementsOnDisk:硬碟中最大快取物件數,若是0表示無窮大
        eternal:true表示物件永不過期,此時會忽略timeToIdleSeconds和timeToLiveSeconds屬性,預設為false
        overflowToDisk:true表示當記憶體快取的物件數目達到了maxElementsInMemory界限後,會把溢位的物件寫到
                硬碟快取中。注意:如果快取的物件要寫入到硬碟中的話,則該物件必須實現了Serializable介面才行。
        diskSpoolBufferSizeMB:磁碟快取區大小,預設為30MB。每個Cache都應該有自己的一個快取區。
        diskPersistent:是否快取虛擬機器重啟期資料
        diskExpiryThreadIntervalSeconds:磁碟失效執行緒執行時間間隔,預設為120秒
        timeToIdleSeconds: 設定允許物件處於空閒狀態的最長時間,以秒為單位。當物件自從最近一次被訪問後,
                如果處於空閒狀態的時間超過了timeToIdleSeconds屬性值,這個物件就會過期,EHCache將把它從快取中清空。
                只有當eternal屬性為false,該屬性才有效。如果該屬性值為0,則表示物件可以無限期地處於空閒狀態
        timeToLiveSeconds:設定物件允許存在於快取中的最長時間,以秒為單位。當物件自從被存放到快取中後,如果處於快取
                中的時間超過了 timeToLiveSeconds屬性值,這個物件就會過期,EHCache將把它從快取中清除。只有當eternal屬性為false,
                該屬性才有效。如果該屬性值為0,則表示物件可以無限期地存在於快取中。timeToLiveSeconds必須大於timeToIdleSeconds屬性,才有意義
        memoryStoreEvictionPolicy:當達到maxElementsInMemory限制時,Ehcache將會根據指定的策略去清理記憶體。
                可選策略有:LRU(最近最少使用,預設策略)、FIFO(先進先出)、LFU(最少訪問次數)。
    -->

    <!-- 設定快取的預設資料過期策略 -->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            overflowToDisk="true"
            timeToIdleSeconds="10"
            timeToLiveSeconds="20"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"/>

    <cache name="simpleCache"
           maxElementsInMemory="5"
           eternal="false"
           overflowToDisk="true"
           timeToIdleSeconds="10"
           timeToLiveSeconds="20"/>

</ehcache>

簡單使用

public static void main(String[] args) {
        CacheManager cacheManager = new CacheManager();

        Cache cache = cacheManager.getCache("simpleCache");

        for (int i = 0; i < 10; i++) {
            cache.put(new Element("key"+i, "value"+i));
            System.out.println("key"+i+ "=" +"value"+i);
            System.out.println(cache.getKeys());
        }

        System.out.println(cache.get("key1"));

        cacheManager.shutdown();

    }

相關文章