EHCache 緩存全接觸

openkk 13年前發布 | 3K 次閱讀 云計算 ZooKeeper

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

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


     ehcache-1.2 cacheNames 列表的取得;

     方法一:

  1. CacheManager.create();   
  2. String[] cacheNames = CacheManager.getInstance().getCacheNames();  

     方法二:

  1. CacheManager manager = new CacheManager();   
  2. String[] cacheNames = manager.getCacheNames();  

     方法三:

  1. CacheManager manager1 = new CacheManager('src/config/ehcache1.');   
  2. CacheManager manager2 = new CacheManager('src/config/ehcache2.xml');   
  3. String[] cacheNamesForManager1 = manager1.getCacheNames();   
  4. String[] cacheNamesForManager2 = manager2.getCacheNames();  


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

     方法一:

  1. CacheManager manager = new CacheManager();  

     方法二:

  1. CacheManager manager = new CacheManager('src/config/ehcache.xml');  

     方法三:

  1. URL url = getClass().getResource('/anotherconfigurationname.xml');   
  2. CacheManager manager = new CacheManager(url);  

     方法四:

  1. InputStream fis = new FileInputStream(new File('src/config/ehcache.xml').getAbsolutePath());   
  2. try {   
  3.     CacheManager manager = new CacheManager(fis);   
  4. finally {   
  5.     fis.close();   
  6. }  


     添加和刪除緩存元素

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

  1. CacheManager singletonManager = CacheManager.create();   
  2. singletonManager.addCache('testCache');   
  3. Cache test = singletonManager.getCache('testCache');  

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

  1. CacheManager singletonManager = CacheManager.create();   
  2. Cache memoryOnlyCache = new Cache('testCache'5000falsefalse52);   
  3. manager.addCache(memoryOnlyCache);   
  4. 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              - 為元素設置消亡前的生存時間。
                                                        也就是一個元素從構建到消亡的最大時間間隔值。
                                                        這只能在元素不是永久駐留時有效。

         刪除緩存元素:

  1. CacheManager singletonManager = CacheManager.create();   
  2. singletonManager.removeCache('test');  


     關閉緩存管理器 CacheManager

  1. CacheManager.getInstance().shutdown();  


     對于緩存對象的操作:
         放入一個簡單的對象到緩存元素;

  1. Cache cache = manager.getCache('sampleCache1');   
  2. Element element = new Element('key1''value1');   
  3. cache.put(element);  

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

  1. Cache cache = manager.getCache('sampleCache1');   
  2. Element element = cache.get('key1');   
  3. Serializable value = element.getValue();  

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

  1. Cache cache = manager.getCache('sampleCache1');   
  2. Element element = cache.get('key1');   
  3. Object value = element.getObjectValue();  

         刪除一個對象從元素;

  1. Cache cache = manager.getCache('sampleCache1');   
  2. Element element = new Element('key1''value1'  
  3. cache.remove('key1');  

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

  1. Cache cache = manager.getCache('sampleCache1');   
  2. cache.flush();  


     獲得緩存大小:
         得到緩存的對象數量;

  1. Cache cache = manager.getCache('sampleCache1');   
  2. int elementsInMemory = cache.getSize();  

         得到緩存對象占用內存的數量

  1. Cache cache = manager.getCache('sampleCache1');   
  2. long elementsInMemory = cache.getMemoryStoreSize();  

         得到緩存對對象占用磁盤的數量

  1. Cache cache = manager.getCache('sampleCache1');   
  2. long elementsInMemory = cache.getDiskStoreSize();  

     關于緩存的讀取和丟失的記錄
         得到緩存讀取的命中次數;

  1. Cache cache = manager.getCache('sampleCache1');   
  2. int hits = cache.getHitCount();  

         得到內存中緩存讀取的命中次數;

  1. Cache cache = manager.getCache('sampleCache1');   
  2. int hits = cache.getMemoryStoreHitCount();  

         得到磁盤中緩存讀取的命中次數;

  1. Cache cache = manager.getCache('sampleCache1');   
  2. int hits = cache.getDiskStoreCount();  

          得到緩存讀取的丟失次數;

  1. Cache cache = manager.getCache('sampleCache1');   
  2. int hits = cache.getMissCountNotFound();  

         得到緩存讀取的已經被銷毀的對象丟失次數;

  1. Cache cache = manager.getCache('sampleCache1');   
  2. int hits = cache.getMissCountExpired();  

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

     實戰:
         XML文件格式:

  1.  maxElementsInMemory='10000'  
  2.  eternal='false'  
  3.  timeToIdleSeconds='120'  
  4.  timeToLiveSeconds='120'  
  5.  overflowToDisk='true'  
  6.  diskPersistent='false'  
  7.  diskExpiryThreadIntervalSeconds='120'  
  8.  memoryStoreEvictionPolicy='LRU'  
  9.  />  
  10.              maxElementsInMemory='10000'  
  11. eternal='false'  
  12. overflowToDisk='true'  
  13. timeToIdleSeconds='2'  
  14. timeToLiveSeconds='3'  
  15. memoryStoreEvictionPolicy='LFU'  
  16.  />  


     源碼:

  1. import java.io.Serializable;   
  2.   
  3. import net.sf.ehcache.Cache;   
  4. import net.sf.ehcache.CacheManager;   
  5. import net.sf.ehcache.Element;   
  6.   
  7. /**  
  8.  #############################################################################  
  9.  # DESCRIBE ehcache 緩存操作DEMO  
  10.  # AUTHOR    悠~游  
  11.  # DATE      2006-7-10  
  12.  # COMPANY   FLX  
  13.  # PORJECT   ehcache-demo  
  14.  #############################################################################  
  15.  */  
  16.   
  17. public class Demo {   
  18.       
  19.     static CacheManager manager= new CacheManager();   
  20.   
  21.     /**  
  22.      *##############################################################################  
  23.      *   
  24.      * @DESCRIBE      
  25.      * @param args  
  26.      * @throws InterruptedException  
  27.      *                           
  28.      *##############################################################################  
  29.      */  
  30.     public static void main(String[] args) throws InterruptedException {   
  31.           
  32.         String[] cacheNames = manager.getCacheNames();   
  33.         System.out.println('讀取的緩存列表為:');   
  34.         for(int i=0;i                     System.out.println('-- '+(i+1)+' '+cacheNames[i]);   
  35.         }   
  36.           
  37.         Cache cache = manager.getCache('cache1');   
  38.         Element element = new Element('key1''value1');   
  39.         cache.put(element);   
  40.           
  41.         element = cache.get('key1');   
  42.         Serializable value = element.getValue();   
  43.         System.out.println('序列化后的值為:'+value.toString());   
  44.   
  45.         element = cache.get('key1');   
  46.         Object value1 = element.getObjectValue();   
  47.         System.out.println('未序列化的值為:'+value1.toString());   
  48.           
  49.         int elementsInMemory = cache.getSize();   
  50.         System.out.println('得到緩存的對象數量:'+elementsInMemory);   
  51.           
  52.         long elementsInMemory1 = cache.getMemoryStoreSize();   
  53.         System.out.println('得到緩存對象占用內存的數量:'+elementsInMemory1);   
  54.           
  55.         long elementsInMemory2 = cache.getDiskStoreSize();   
  56.         System.out.println('得到緩存對對象占用磁盤的數量:'+elementsInMemory2);           
  57.           
  58.         int hits = cache.getHitCount();   
  59.         System.out.println('得到緩存讀取的命中次數:'+hits);           
  60.           
  61.         int hits1 = cache.getMemoryStoreHitCount();   
  62.         System.out.println('得到內存中緩存讀取的命中次數:'+hits1);           
  63.           
  64.         int hits2 =cache.getDiskStoreHitCount();   
  65.         System.out.println('得到磁盤中緩存讀取的命中次數:'+hits2);           
  66.           
  67.         int hits3 = cache.getMissCountNotFound();   
  68.         System.out.println('得到緩存讀取的丟失次數:'+hits3);           
  69.           
  70.         int hits4 = cache.getMissCountExpired();   
  71.         System.out.println('得到緩存讀取的已經被銷毀的對象丟失次數:'+hits4);       
  72.     }   
 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!