程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 開源緩存包EHCache全接觸

開源緩存包EHCache全接觸

編輯:關於JAVA

EHCache 是一個純java的,在Hibernate2.1充當可插入的的在進程中的緩存,它具有以下緩存,最小的依賴性,全面的文特性:快速,簡單,豐富的文檔和測試用例。 

官方網站 http://ehcache.sourceforge.net/ 

ehcache-1.2 cacheNames 列表的取得;

方法一:
CacheManager.create();
String[] cacheNames = CacheManager.getInstance().getCacheNames();
方法二:
CacheManager manager = new CacheManager();
String[] cacheNames = manager.getCacheNames();
方法三:
CacheManager manager1 = new CacheManager("src/config/ehcache1.xml");
CacheManager manager2 = new CacheManager("src/config/ehcache2.xml");
String[] cacheNamesForManager1 = manager1.getCacheNames();
String[] cacheNamesForManager2 = manager2.getCacheNames();

ehcache-1.2 管理器各種建立的方法:

方法一:
CacheManager manager = new CacheManager();
方法二:
CacheManager manager = new CacheManager("src/config/ehcache.xml");
方法三:
URL url = getClass().getResource("/anotherconfigurationname.xml");
CacheManager manager = new CacheManager(url);
方法四:
InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());
try {
CacheManager manager = new CacheManager(fis);
} finally {
fis.close();
}

添加和刪除緩存元素

設置一個名為test 的新cache,test屬性為默認

CacheManager singletonManager = CacheManager.create();
singletonManager.addCache("testCache");
Cache test = singletonManager.getCache("testCache");

設置一個名為test 的新cache,並定義其屬性

CacheManager singletonManager = CacheManager.create();
Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2);
manager.addCache(memoryOnlyCache);
Cache test = singletonManager.getCache("testCache");

Cache 屬性說明:

構造函數:

public Cache(java.lang.String name,
int maxElementsInMemory,
boolean overflowToDisk,
boolean eternal,
long timeToLiveSeconds,
long timeToIdleSeconds)

參數說明:

name                           - 元素名字。
                 maxElementsInMemory           - 設定內存中創建對象的最大值。
                 overflowToDisk                - 設置當內存中緩存達到 maxInMemory 限制時元素是否可寫到磁盤
                                                        上。
                 eternal                       - 設置元素(譯注:內存中對象)是否永久駐留。如果是,將忽略超
                                                       時限制且元素永不消亡。
                 timeToIdleSeconds             - 設置某個元素消亡前的停頓時間。
                                                       也就是在一個元素消亡之前,兩次訪問時間的最大時間間隔值。
                                                       這只能在元素不是永久駐留時有效(譯注:如果對象永恆不滅,則
                                                       設置該屬性也無用)。
                                                       如果該值是 0 就意味著元素可以停頓無窮長的時間。
                 timeToLiveSeconds             - 為元素設置消亡前的生存時間。
                                                        也就是一個元素從構建到消亡的最大時間間隔值。
                                                        這只能在元素不是永久駐留時有效。

刪除緩存元素:

CacheManager singletonManager = CacheManager.create();

singletonManager.removeCache("test");

關閉緩存管理器 CacheManager

CacheManager.getInstance().shutdown();

對於緩存對象的操作:

放入一個簡單的對象到緩存元素;

Cache cache = manager.getCache("sampleCache1");
         Element element = new Element("key1", "value1");
         cache.put(element);

得到一個序列化後的對象屬性值;

Cache cache = manager.getCache("sampleCache1");
         Element element = cache.get("key1");
         Serializable value = element.getValue();

得到一個沒有序列化後的對象屬性值;

Cache cache = manager.getCache("sampleCache1");
         Element element = cache.get("key1");
         Object value = element.getObjectValue();

刪除一個對象從元素;

Cache cache = manager.getCache("sampleCache1");
         Element element = new Element("key1", "value1"
         cache.remove("key1");

對於永固性磁盤存儲,立即存儲到磁盤:

Cache cache = manager.getCache("sampleCache1");
         cache.flush();

獲得緩存大小:

得到緩存的對象數量;
         Cache cache = manager.getCache("sampleCache1");
         int elementsInMemory = cache.getSize();
         得到緩存對象占用內存的數量
         Cache cache = manager.getCache("sampleCache1");
         long elementsInMemory = cache.getMemoryStoreSize();
         得到緩存對對象占用磁盤的數量
         Cache cache = manager.getCache("sampleCache1");
         long elementsInMemory = cache.getDiskStoreSize();

關於緩存的讀取和丟失的記錄

得到緩存讀取的命中次數;
         Cache cache = manager.getCache("sampleCache1");
         int hits = cache.getHitCount();

         得到內存中緩存讀取的命中次數;
         Cache cache = manager.getCache("sampleCache1");
         int hits = cache.getMemoryStoreHitCount();
         得到磁盤中緩存讀取的命中次數;
         Cache cache = manager.getCache("sampleCache1");
         int hits = cache.getDiskStoreCount();

         得到緩存讀取的丟失次數;
         Cache cache = manager.getCache("sampleCache1");
         int hits = cache.getMissCountNotFound();
         得到緩存讀取的已經被銷毀的對象丟失次數;
         Cache cache = manager.getCache("sampleCache1");
         int hits = cache.getMissCountExpired();

--------------------------

----------簡單例子------------

--------------------------

實戰:

XML文件格式:

<ehcache>
                 <diskStore path="java.io.tmpdir"/>
                 <defaultCache
                         maxElementsInMemory="10000"
                         eternal="false"
                         timeToIdleSeconds="120"
                         timeToLiveSeconds="120"
                         overflowToDisk="true"
                         diskPersistent="false"
                         diskExpiryThreadIntervalSeconds="120"
                         memoryStoreEvictionPolicy="LRU"
                         />
                 <cache name="cache1"
                        maxElementsInMemory="10000"
                        eternal="false"
                        overflowToDisk="true"
                        timeToIdleSeconds="2"
                        timeToLiveSeconds="3"
                        memoryStoreEvictionPolicy="LFU"
                         />

             </ehcache>

源碼:

import java.io.Serializable;
         import net.sf.ehcache.Cache;
         import net.sf.ehcache.CacheManager;
         import net.sf.ehcache.Element;
         /**
          #############################################################################
          # DESCRIBE ehcache 緩存操作DEMO
          # AUTHOR   悠~游
          # DATE     2006-7-10
          # COMPANY  FLX
          # PORJECT  ehcache-demo
          #############################################################################
          */
         public class Demo {

             static CacheManager manager= new CacheManager();
             /**
              *##############################################################################
              *
              * @DESCRIBE
              * @param args
              * @throws InterruptedException
              *
              *##############################################################################
              */
             public static void main(String[] args) throws InterruptedException {

                 String[] cacheNames = manager.getCacheNames();
                 System.out.println("讀取的緩存列表為:");
                 for(int i=0;i<cacheNames.length;i++){ 
                     System.out.println("-- "+(i+1)+" "+cacheNames[i]);
                 }

                 Cache cache = manager.getCache("cache1");
                 Element element = new Element("key1", "value1");
                 cache.put(element);

                 element = cache.get("key1");
                 Serializable value = element.getValue();
                 System.out.println("序列化後的值為:"+value.toString());
                 element = cache.get("key1");
                 Object value1 = element.getObjectValue();
                 System.out.println("未序列化的值為:"+value1.toString());

                 int elementsInMemory = cache.getSize();
                 System.out.println("得到緩存的對象數量:"+elementsInMemory);

                 long elementsInMemory1 = cache.getMemoryStoreSize();
                 System.out.println("得到緩存對象占用內存的數量:"+elementsInMemory1);

                 long elementsInMemory2 = cache.getDiskStoreSize();
                 System.out.println("得到緩存對對象占用磁盤的數量:"+elementsInMemory2);

                 int hits = cache.getHitCount();
                 System.out.println("得到緩存讀取的命中次數:"+hits);

                 int hits1 = cache.getMemoryStoreHitCount();
                 System.out.println("得到內存中緩存讀取的命中次數:"+hits1);

                 int hits2 =cache.getDiskStoreHitCount();
                 System.out.println("得到磁盤中緩存讀取的命中次數:"+hits2);

                 int hits3 = cache.getMissCountNotFound();
                 System.out.println("得到緩存讀取的丟失次數:"+hits3);

                 int hits4 = cache.getMissCountExpired();
                 System.out.println("得到緩存讀取的已經被銷毀的對象丟失次數:"+hits4);
             }
         }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved