EhCacheの使用と原理

12613 ワード

EhCache は、純粋なJavaのプロセス内キャッシュフレームであり、高速、精干などの特徴があり、HibernateにおいてデフォルトのCacheco Provider OScacheである。
  適用場所:
  • 比較的少ない更新テーブルデータ
  • 合併に対する要求があまり厳しい状況ではない。
  • Ehcacheは、ヒベルナのデフォルトキャッシュポリシー
  • として、ヒベルナから発展した。
  • は単独で適用され、純粋に符号化された方式で、CacheManagerによってCacheを作成し管理します。 
  • は、servletキャッシュに使用することができ、このときSimplePageFramentCachingFilter(ehcache-web-2.3.4.jarパケットから)を使用する。
  •   特徴:
  • 設定ファイルに設定されている限定条件に達した場合、複数の中淘汰戦略が選択できます。
              FIFO :first in first out ,これはみんなが一番よく知っているので、先に出してください。
              LFU : Less Frequently Used ,これまで少なくとも使われていたものは消去されます。キャッシュの要素にはhitがあります。 プロパティ 値が一番小さいものはキャッシュをクリアします。
              LRU :Least Recently Used ,最近最も少なく使われているのは、キャッシュの要素にはタイムスタンプがあり、キャッシュの容量がいっぱいになって、また新しい要素をキャッシュするために場所を空けておく必要がある場合、既存のキャッシュ要素の中のタイムスタンプは現在の時間から一番遠い要素がキャッシュされます。
    2. キャッシュデータの格納場所は2つあります。メモリとディスクですので、容量の問題は心配しなくても大丈夫です。
    3. キャッシュデータは仮想マシンの再起動中にディスクに書き込みます。
      深層原理:http://raychase.iteye.com/blog/1545906、四火さんの説明は超詳しいです。  関連する設定:
    1.自分でコードして使う
    xmlファイルの設定:     
          <ehcache>
    
                <!--         , EHCache         ,              -->
    
                <diskStore path="java.io.tmpdir"/>
    
                <!--               -->
    
                <defaultCache
    
                  maxElementsInMemory="10000"
    
                 eternal="false"
    
                 overflowToDisk="true"
    
                 timeToIdleSeconds="0"
    
                 timeToLiveSeconds="0"
    
                 diskPersistent="false"
    
                 diskExpiryThreadIntervalSeconds="120"/>
    
    
    
            <cache name="TESTCACHE"                        
    
                maxElementsInMemory="1000"   
    
                eternal="true"
    
                overflowToDisk="true"/>   
    
        </ehcache>
     
     ehcache.xml元素の属性: name:キャッシュ名
        maxElements InMemory:メモリ中最大キャッシュ対象数
       maxElements OnDisk:ハードディスクで最大キャッシュ対象数、0なら無限大を表します。
       eternal:trueは対象がいつまでも期限が切れないことを表しています。この時はtimeToIdle SecondsとtimeToLiveSecondsの属性を無視します。デフォルトはfalseです。
     
       overflowToDisk:trueは、メモリキャッシュの対象数がmaxElements InMemoryの限界に達したら、オーバーフローの対象をハードディスクキャッシュに書き込むという意味です。注意:キャッシュの対象がハードディスクに書き込まれる場合、そのオブジェクトはSerializableインターフェースを実現しなければなりません。
     
       diskSpool BufferSizMB:ディスクキャッシュエリアのサイズは、デフォルトでは30 MBです。各Cacheは自分のキャッシュエリアを持つべきです。
       diskyPersistent:仮想マシン再起動期間データをキャッシュするかどうか
       diskExpiry ThreadInterval Seconds:ディスクの故障スレッドの運行時間間隔は、デフォルトは120です。
     
       timeToIdleSeconds:許容対象がアイドル状態にある最長時間を設定し、秒単位で。このオブジェクトが最近訪問されてから、アイドル状態にある時間がtimeToIdleSecondsの属性値を超えたら、このオブジェクトは期限が切れます。EHCacheはキャッシュから空にします。ETernal属性がfalseである場合のみ、この属性は有効です。 有効です。この属性値が0の場合、オブジェクトは無期限でアイドル状態となります。
     
      timeToLiveSeconds:設定対象はキャッシュに存在する最長時間を秒単位で許可します。オブジェクトがキャッシュに保存されてから、キャッシュ中の時間がtimeToLiveSecondsの属性値を超えたら、このオブジェクトは期限が切れます。EHCacheはキャッシュから削除します。この属性は、ETernal属性がfalseである場合にのみ有効です。この属性値が0の場合、オブジェクトは無期限にキャッシュに存在することができる。timeToLiveSecondsはtimeToIdleSecondsの属性より大きくなければなりません。意味があります。
     
      memory Streevication Policy:maxElements InMemory制限に達したら、Ehcacheは指定されたポリシーに従ってメモリを整理します。オプションとしては、LRU(最近は最小使用、デフォルトポリシー)、FIFO(先入先出)、LFU(最小アクセス数)があります。
      
             javaプログラミングコード:
          
          
          // classes    ehcache.xml    
    
            CacheManager cacheManager = CacheManager.getInstance();
    
    
    
          // classes             
    
          //CacheManager cacheManager = CacheManager.create(getClass().getResource("/ehcache.xml"));
    
    
    
          //        Cache  
    
            Cache cache = cacheManager.getCache("TESTCACHE");
    
    
    
          //  Cache      
    
            cache.removeAll();
    
    
    
          // Cache     
    
            cache.put(new Element("s1", "11111"));
    
            cache.put(new Element("s2", "22222"));
    
            cache.put(new Element("s3", "33333"));
    
    
    
          // Cache     
    
              Element e = cache.get("s3");
    
            System.out.println(e.getValue());
    
    
    
          //       
    
            cacheManager.shutdown();
         
      
        2.servletキャッシュとして使用する
      
    web.xmlでの設定
          
            <filter>
    
                 <filter-name>SimplePageFragmentCachingFilter</filter-name>
    
                  <filter-class>
    
                      net.sf.ehcache.constructs.web.filter.SimplePageFragmentCachingFilter
    
                  </filter-class>
    
            </filter>
    
            <filter-mapping>
    
                <filter-name>SimplePageFragmentCachingFilter</filter-name>
    
                <url-pattern>/*</url-pattern>
    
            </filter-mapping> 
     ehcache.xmlにおける配置
        <?xml version="1.0" encoding="UTF-8"?>
    
        <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
            xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="false"
    
            monitoring="on">
    
            <diskStore path="java.io.tmpdir" />
    
            <defaultCache 
    
                    maxElementsInMemory="10000"   
    
                    eternal="false"
    
                    timeToIdleSeconds="3600" 
    
                    timeToLiveSeconds="3600" 
    
                    overflowToDisk="true"
    
                    diskPersistent="false"
    
                    diskExpiryThreadIntervalSeconds="3600" 
    
                    memoryStoreEvictionPolicy="LRU"/>
    
                
    
            <cache name="SimplePageFragmentCachingFilter" 
    
                   maxElementsInMemory="10000"
    
                   maxElementsOnDisk="100000" 
    
                   overflowToDisk="true" 
    
                   diskSpoolBufferSizeMB="5120"
    
                   eternal="false" 
    
                   timeToIdleSeconds="86400" 
    
                   timeToLiveSeconds="0"
    
                   memoryStoreEvictionPolicy="LFU" />
    
    
    
          </ehcache> 
    この時は追加的にjarパッケージを導入する必要があります。ehcache-web-2.3.4.jar
     
      ダウンロードアドレス:Ehcache 2.5.1ダウンロードアドレス:http://sourceforge.net/projects/ehcache/files/ehcache/ehcache-2.5.1/