Ehcache 緩存(二)xml配置相關

如果沒有配置ehcache.xml文件,ehcache-failsafe.xml將作爲默認的ehcache配置。

1.<diskStore path="java.io.tmpdir"/>

a). diskStore(磁盤存儲)元素是可選的。當你爲任意緩存開啓了overflowToDisk或者diskPersistent屬性時,  它就必須配置。如果沒配置,那麼會出現提示信息並默認使用java.io.tmpdir作爲存儲地址;
  diskStore只有一個屬性-"path"。它是.data和.index文件被創建時的目錄路徑;
  如果path是一個java系統屬性,那麼在運行的虛擬機中取而代之的是它真實的路徑值。
  下列屬性會被轉化:
    * user.home - User's home directory
    * user.dir - User's current working directory
    * java.io.tmpdir - Default temp file path
    * ehcache.disk.store.dir - 你通常會在命令行指定的系統屬性,比如:
java -Dehcache.disk.store.dir=/u01/myapp/diskdir ...
   也可以在該屬性下指定子目錄,比如:java.io.tmpdir/one

2. <cacheManagerEventListenerFactory class="" properties=""/>

a) .CacheManagerEventListenerFactory可創建一個CacheManagerPeerProvider(當從CacheManager添加或刪除緩存時,它會收到通知)。
  CacheManagerEventListenerFactory的屬性:
  * class - 工廠類名全稱
  * properties -  以逗號分隔針對工廠配置的屬性

 b) .CacheManager事件監聽器的類名需爲全稱。
這些事件包括增加一個緩存、刪除一個緩存。
回調到監聽器的方法有同步和非同步的。而作爲實現者的職責,安全的處理潛在的性能和線程安全取決於監聽器在做什麼。如果沒有指定工廠類,那麼監聽器也不會創建。它是不存在默認值的。

3.(分佈式操作可啓用)

<cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
            properties="peerDiscovery=automatic,
                        multicastGroupAddress=230.0.0.1,
                        multicastGroupPort=4446, timeToLive=1"/>

   a) .CacheManagerPeerProviderFactory來創建CacheManagerPeerProvider,在集羣中,它可以發現其他的CacheManagers。
   CacheManagerPeerProviderFactory的屬性:
   * class - 工廠類全稱
   * properties  - 以逗號分隔針對工廠配置的屬性

   b).Ehcache 配備了內置的基於RMI的通訊系統,該系統有兩種來發現參與集羣的CacheManager的方式:
   * 自動的,使用多播組。它可以自動發現同類manager並且探測到它們進入或離開該組的任何變化。
   * 手動的,使用使用手動的rmiURL配置。在配置是要提供同類manager的硬編碼列表!
   b1).可按照下面示例配置自動模式:
   
<cacheManagerPeerProviderFactory
          class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
          properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1,
          multicastGroupPort=4446, timeToLive=32"/>

   可用的屬性有:
      * peerDiscovery (必須的) - 指定爲自動模式
      * multicastGroupAddress (必須的) - 指定一個可用的多播組地址
      * multicastGroupPort (必須的) - 爲多播檢測信號交通指定一個專用的端口
      * timeToLive - 一個0-255之間的值,來決定數據包將傳播多遠
    按照慣例,會有如下一些限制:
      0   - 同一主機
      1   - 位於同一子網
      32  - 相同的站點
      64  - 同一區域
      128 - 同一大陸
      255 - 無限制
   b2). 可按照下面示例配置手動模式:
     
<cacheManagerPeerProviderFactory class=
            "net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
              properties="peerDiscovery=manual,rmiUrls=//server1:40000/sampleCache1|//server2:40000/sampleCache1
                          | //server1:40000/sampleCache2|//server2:40000/sampleCache2"/>

    可用的屬性有:
     * peerDiscovery(必須的) - 指定爲手動模式
     * rmiUrls(必須的) - 在form中,形式以管道分隔的rmiURL列表 //hostname:port

4.(分佈式操作可啓用)

<cacheManagerPeerListenerFactory
            class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"/>

  CacheManagerPeerListenerFactory可用來創建CacheManagerPeerListener(在集羣中可監聽來自高速緩存複製器的消息)
  CacheManagerPeerListenerFactory的屬性:
    * class - 工廠類全稱
    * properties  - 以逗號分隔針對工廠配置的屬性
   Ehcache 配備了內置的基於RMI的通訊系統。可用RMICacheManagerPeerListenerFactory配置其監聽器組件RMICacheManagerPeerListener。
   可按照下面示例配置:
 
 <cacheManagerPeerListenerFactory
        class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
        properties="hostName=fully_qualified_hostname_or_ip,port=40001,socketTimeoutMillis=120000"/>

  所有的屬性都是可選的。如下:
  * hostName - 運行監聽器的主機名。指定位置的主機是多宿主的,而你想控制在集羣中接收消息的接口。默認值爲默認接口的主機名。
  * port - 監聽器監聽的端口。默認值我自由端口。
  * socketTimeoutMillis - 向監聽器發送消息時,MS客戶端套接字的number將保持開放。即使發送最慢的消息它也應滿足。默認值爲120000ms
  

 5. (cache的配置)

以下屬性是必須的:
  name : cache的名稱。用於識別cache,不可重複。
  maxElementsInMemory : 設置在內存中創建的最大對象個數(如果內存中元素超出該個數,超出的元素就會自動緩存到ehcache.xml設定的磁盤地址中)
  eternal : 設置元素是否是永恆的,如果是,那麼timeouts將會被忽略且元素永不過期!
  overflowToDisk : 當內存中高速緩存已達到最大限制,設置元素是否可以溢出到磁盤
  以下屬性是可選的:
  timeToIdleSeconds : 設置元素過期前的空閒時間。即元素過期前可訪問的最大時間量(超過該時間,該緩存會被清除)。只有非eternal的元素纔可使用!
        值爲0意味着元素可以空閒到無限久。默認值爲0.
  timeToLiveSeconds : 設置元素過期前的存活時間。即元素從創建到過期間最大的時間量。只有非eternal的元素纔可使用!
  值爲0以爲着元素可一直保存。默認值爲0.
  
  diskPersistent : 重啓虛擬機是否依然保存磁盤存儲數據。默認值爲false。
  diskExpiryThreadIntervalSeconds : 運行磁盤終止線程之間的秒數。默認值爲120s

  diskSpoolBufferSizeMB: 爲後臺打印緩衝區分配的大小。對這一區域進行寫操作然後會異步寫入到磁盤。默認大小30MB。每個打印緩衝區只對應自己的cache。如果你遇到內存錯誤,就可以考慮降低該值。想提高磁盤存儲性能就可以考慮增大該值。Trace level logging in the DiskStore will show if put back ups are occurring.

  memoryStoreEvictionPolicy: 到達maxElementsInMemory限制時,策略會強制執行。默認的策略是最近最少使用(LRU).其他策略-'先進先出'(FIFO)和'較少使用'(LFU)也可用.
   CACHE中元素也可以包含帶有相同工廠類和屬性格式的子元素。可以如下定義子元素:
   * cacheEventListenerFactory - 爲緩存事件註冊監聽器,比如,put,remove,update,和expire
   * bootstrapCacheLoaderFactory - 指定BootstrapCacheLoader,由cache在初始化預填充自身時調用。
   每個分佈式的cache都需要設置一個緩存事件監聽器來向其他同行CacheManager傳遞消息。對於內置的RMI,可對每個分佈式緩存的配置添加RMICacheReplicatorFactory類型的cacheEventListenerFactory元素來加以實現。如下例所示:

 <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
         properties="replicateAsynchronously=true,
         replicatePuts=true,
         replicateUpdates=true,
         replicateUpdatesViaCopy=true,
         replicateRemovals=true "/>

   RMICacheReplicatorFactory只識別如下屬性:
   * replicatePuts=true|false - 放在緩存中的新元素是否被複制到其他緩存中。默認true
   * replicateUpdates=true|false - 重寫一個已經具有相同鍵的元素是否被複制。默認爲true
   * replicateRemovals=true  -  移除的元素是否被複制。默認爲true
   * replicateAsynchronously=true | false - 複製行爲是異步(true)還是同步(false)的。默認爲true
   * replicateUpdatesViaCopy=true | false -是否新元素複製到其他caches中(true),或是發送刪除消息。默認值爲true
   * asynchronousReplicationIntervalMillis=<number of milliseconds>
   在使用RMICacheReplicators的集羣中,RMIBootstrapCacheLoader引導緩存。它可如下配置:
   
<bootstrapCacheLoaderFactory
        class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
        properties="bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"/>

   RMIBootstrapCacheLoaderFactory只識別下列屬性:
  * bootstrapAsynchronously=true|false -  cache啓動後,bootstrap是否在後臺進行。如果爲false,引導行爲必須在cache可用之前完成。默認值爲true。
  * maximumChunkSizeBytes=<integer> - cache可能會很大,比虛擬機的內存限制還大。該屬性允許引導程序在塊中獲取元素。默認塊大小5MB

   
發佈了37 篇原創文章 · 獲贊 33 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章