日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ehcache 默认大小_简单的使用ehcache

發(fā)布時間:2023/12/2 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ehcache 默认大小_简单的使用ehcache 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

ehcache是一個用Java實現(xiàn)的使用簡單,高速,實現(xiàn)線程安全的緩存管理類庫,ehcache提供了用內(nèi)存,磁盤文件存儲,以及分布式存儲方式等多種靈活的cache管理方案。同時ehcache作為開放源代碼項目,采用限制比較寬松的Apache License V2.0作為授權(quán)方式,被廣泛地用于Hibernate,??Spring,Cocoon等其他開源系統(tǒng)。

Ehcache的類層次模型主要為三層,最上層的是CacheManager,他是操作Ehcache的入口。我們可以通過CacheManager.getInstance()獲得一個單個的CacheManager,或者通過CacheManager的構(gòu)造函數(shù)創(chuàng)建一個新的CacheManager。每個CacheManager都管理著多個Cache。而每個Cache都以一種類Hash的方式,關(guān)聯(lián)著多個Elemenat。而Element則是我們用于存放要緩存內(nèi)容的地方。

ehcache的刷新策略

ehcache的刷新策略是當(dāng)緩存在放入的時候記錄一個放入時間,它是用Lazy Evict的方式,在取的時候同設(shè)置的TTL比較

ehcache緩存的3種清空策略:

1 FIFO,先進先出

2 LFU,最少被使用,緩存的元素有一個hit屬性,hit值最小的將會被清出緩存。

3 LRU,最近最少使用的,緩存的元素有一個時間戳,當(dāng)緩存容量滿了,而又需要騰出地方來緩存新的元素的時候,那么現(xiàn)有緩存元素中時間戳離當(dāng)前時間最遠的元素將被清出緩存。

事件處理

可以為CacheManager添加事件監(jiān)聽,當(dāng)對CacheManager增刪Cache時,事件處理器將會得到通知。要配置事件處理,需要通過ehcache的配置文件來完成。

可以為Cache添加事件監(jiān)聽,當(dāng)對Cache增刪Element時,事件處理器將會得到通知。要配置事件處理,需要通過ehcache的配置文件來完成。

ehcache參數(shù)配置:

maxInMemory - 設(shè)定內(nèi)存中創(chuàng)建對象的最大值。

eternal - 設(shè)置元素(譯注:內(nèi)存中對象)是否永久駐留。如果是,將忽略超時限制且元素永不消亡。

timeToIdleSeconds - 設(shè)置某個元素消亡前的停頓時間。也就是在一個元素消亡之前,兩次訪問時間的最大時間間隔值。這只能在元素不是永久駐留時有效(譯注:如果對象永恒不滅,則設(shè)置該屬性也無用)。

如果該值是 0 就意味著元素可以停頓無窮長的時間。

timeToLiveSeconds - 為元素設(shè)置消亡前的生存時間。也就是一個元素從構(gòu)建到消亡的最大時間間隔值。這只能在元素不是永久駐留時有效。

overflowToDisk??- 設(shè)置當(dāng)內(nèi)存中緩存達到maxInMemory 限制時元素是否可寫到磁盤上。

1.ehcache使用了LinkedHashMap來存放Element。jdk要1.5以上。Ehcache1.5可以使用jdk1.4

如果在添加Elemtent時,緩存中的Element個數(shù)達到了最大緩存數(shù)并且overflowToDisk配置的屬性為true,Ehcache會更具配置項MemoryStoreEvictionPolicy的失效策略將Element輸出到磁盤。如果overflowToDisk為fasle,Ehcache將刪除內(nèi)存中Element

值得注意的是緩存中失效的Element并不會別馬上清理掉,所以想得到內(nèi)存的真實大小應(yīng)該調(diào)用方法calculateInMemorySize()方法。

一個ehcache.xml對應(yīng)一個CacheManager

不同的緩存應(yīng)該對應(yīng)不同的硬盤上的路徑,否則會報錯

注意要想使用磁盤緩存,緩存的Element必須實現(xiàn)序列化接口。

Ehcache會將每個緩存配置的文件路徑下創(chuàng)建一個cache_name.data文件,如果使用的磁盤持久化技術(shù),還會生成一個cache name.index文件。

8.Ehcache有一個后臺線程專門做Ellment失效監(jiān)測以及清除工作。設(shè)置線程運行間隔時間,可通過設(shè)置diskExpiryThreadIntervalSeconds屬性來完成,此值不宜設(shè)置過低,否則會導(dǎo)致清理線程占用大量CPU資源。默認值是120秒。

9.持久化可在Element的diskPersistent配置項中配置,如果配置為“false”或是“omitted”在CacheManager shutdown或是startup后,用來緩存Element的文件將被清除掉。如果設(shè)置為“true”,data和index文件會被保存下來,對于新創(chuàng)建的CacheManager Element也是可用的。

使用時必須顯示調(diào)用cache. Flush()才會將數(shù)據(jù)緩存到磁盤中。

磁盤緩存步驟:從MemoryStore中把沒有失效的Element刷新到DiskStore,Element被寫入到data文件,Element將被序列化到index文件。

12.磁盤緩存大小默認是沒有限制的,不過可通過maxElementsOnDisk來指定。當(dāng)磁盤緩存達到maxElementsOnDisk指定的值時,Ehcache會清理磁盤中的緩存使用默認策略是LFU(使用頻率最低)。

13.在使用完Ehcache后,必須要shutdown緩存。Ehcache中有自己的關(guān)閉機制,不過最好在你的代碼中顯示調(diào)用CacheManager.getInstance().shutdown();

14.Cache:對于getValue()能取到可序列化的值;getObjectValue()取得非序列化的值

15.cache.getSize();得到緩存中元素的個數(shù);獲得當(dāng)前MemoryStore中的element數(shù)量:cache.getMemoryStoreSize();獲得當(dāng)前DiskStore中element數(shù)量:cache.getDiskStoreSize();

16.在使用完Ehcache后,必須要shutdown緩存。Ehcache中有自己的關(guān)閉機制,不過最好在你的代碼中顯示調(diào)用CacheManager.getInstance().shutdown();

17.ehcache-core-1.6—1.7沒有任何依賴;ehcache1.7.1依賴SLF4J,以及相應(yīng)的log的jar包。

18.CacheManager可以通過單例(factory的靜態(tài)方法)或者構(gòu)造函數(shù)(constructors)創(chuàng)建。分別叫做single model和instance model。當(dāng)兩種情況都有的時候,系統(tǒng)會采用單例模式,構(gòu)造器每次都生成單例模式

19.對于想存儲數(shù)據(jù)到硬盤,或者集群時復(fù)制到其他緩存區(qū)域的數(shù)據(jù),必須可序列化。如果不可序列化,該數(shù)據(jù)在進行上述操作時會被丟棄,且沒有報錯,只是在debug級別有日志信息。

20.讀取cache的數(shù)據(jù),有以下幾種方式:

Cache-aside:直接操作數(shù)據(jù)

Cache-as-sor:read-through、write-through和write-behind的結(jié)合

Read-through:

Write-through:

Write-behind:

21.從ehcache2.0開始,以下屬性可以在運行時改變:

? timeToLive

? timeToIdle

? maxElementsInMemory

? maxElementsOnDisk

? memory store eviciton policy

? CacheEventListeners can be added and removed dynamically []

當(dāng)eternal屬性為“true”時,timeToLive和timeToIdle會失效

22.以下代碼演示怎么運行時修改緩存屬性

This example shows how to dynamically modify the cache configuration of an already running cache:

Cache cache = manager.getCache("sampleCache");

CacheConfiguration config = cache.getCacheConfiguration();

config.setTimeToIdleSeconds(60);

config.setTimeToLiveSeconds(120);

config.setMaxElementsInMemory(10000);

config.setMaxElementsOnDisk(1000000);

Dynamic cache configurations can also be frozen to prevent future changes:

Cache cache = manager.getCache("sampleCache");

cache.disableDynamicFeatures();

23.2.5之前是通過元素的個數(shù)來表示內(nèi)存或者硬盤的大小;2.5之后,通過字節(jié)數(shù)來表示。2.5暫時還沒有出來。新屬性將會是:

The new cache attributes are:

? maxBytesOnHeap

? maxBytesOffHeap (formerly maxMemoryOffHeap)

? maxBytesOnDisk

甚至,還可以指定比例,如:maxBytesOnHeap="20%".

24.Ehcache可以將一些數(shù)據(jù)一直放到緩存或者堆?;蛘哂脖P或者terracotta的L2中。主要是為了滿足Hibernate等一些情況下的需求。但是,這樣很容易造成內(nèi)存溢出的錯誤

25.當(dāng)緩存剛啟動時,ehcache提供一個機制可以先加載數(shù)據(jù):BootstrapCacheLoader

class="net.sf.ehcache.distribution.jgroups.JGroupsBootstrapCacheLoaderFactory"

properties="bootstrapAsynchronously=true"/>

DiskStoreBootstrapCacheLoaderFactory:從硬盤加載數(shù)據(jù)到堆棧

class="net.sf.ehcache.store.DiskStoreBootstrapCacheLoaderFactory"

properties="bootstrapAsynchronously=true"/>

TerracottaBootstrapCacheLoaderFactory:從terracotta的L2中加載數(shù)據(jù)

class="net.sf.ehcache.store.TerracottaStoreBootstrapCacheLoaderFactory"

properties="bootstrapAsynchronously=true"/>

26.可以配置ehcache在讀或者寫的時候,做些事情。

CacheConfiguration config = new CacheConfiguration("copyCache", 1000).copyOnRead(true)

Cache copyCache = new Cache(config);

默認此屬性是false。

maxElementsInMemory="10"

eternal="false"

timeToIdleSeconds="5"

timeToLiveSeconds="10"

overflowToDisk="false"

copyOnRead="true"

copyOnWrite="true">

com.company.ehcache.MyCopyStrategy"/>

27.每一個cache都有一個copyStrategy,所以,該實現(xiàn)是要求線程安全的

在ehcache啟動的時候,可以設(shè)置緩存失效。命令行啟動的時候如下:

java -Dnet.sf.ehcache.disabled=true

其他特殊的系統(tǒng)屬性:

1)java -Dnet.sf.ehcache.use.classic.lru=true

當(dāng)LRU被選中的時候,更老的LruMemoryStore實現(xiàn)策略將會被真正采用

28.ehcache.xml必須遵守ehcache.xsd文件中的要求

29.當(dāng)無參的構(gòu)造函數(shù),或者靜態(tài)構(gòu)造方法被調(diào)用的時候,系統(tǒng)會在最頂層的classpath路徑下找名叫ehcache.xml的配置文件,如果查找失敗,會以jar包中的ehcache-failsafe.xml文件(里邊的緩存配置極其簡單)替代。同時,一個警告會提醒用戶建立自己的配置文件。

30.Update checker可以檢查是否有最新的ehcache版本。有兩個辦法可以去掉該功能:

1)通過系統(tǒng)參數(shù):-Dnet.sf.ehcache.skipUpdateCheck=true

2)通過配置文件:

xsi:noNamespaceSchemaLocation="ehcache.xsd"

updateCheck="false" monitoring="autodetect"

dynamicConfig="true">

31.Ehcache1.6之前只支持ASCII編碼,之后,UTF-8也被支持。但UTF-8比ASCII更多落后,所以沒必要做專門的轉(zhuǎn)換

32.每一個Cachemanager應(yīng)該有自己的獨有的ehcache.xml配置文件。因為,當(dāng)共用時,硬盤緩存路徑或者監(jiān)聽端口將會沖突。系統(tǒng)也會發(fā)出警告,提醒用戶配置專門的配置文件為每一個cachemanager.在分布式系統(tǒng)中,ehcache.xml應(yīng)該配置成一樣的。

33.Ehcache有3個存儲:

1)內(nèi)存存儲

2)非堆存儲(大內(nèi)存,企業(yè)ehcache才擁有)

3)硬盤存儲(兩個版本:開源的和企業(yè)級ehcache)

34.內(nèi)存存儲

其本質(zhì)是使用java的LinkedHashMap來實現(xiàn)的。多線程安全、內(nèi)存管理安全、速度快

35.calculateInMemorySize()可以用來計算當(dāng)前ehcache內(nèi)存占用大小。但生產(chǎn)線上不應(yīng)該使用,因為這個功能效率非常低

36.同時,ehcache內(nèi)部有一個低等級的進程,它會判斷元素的是否過期。diskExpiryThreadIntervalSeconds屬性可以設(shè)置該線程執(zhí)行的間隔時間(默認是120秒,不能太小,以免影響效率).

37.非堆存儲

Terracotta BigMemory是一個新增的功能,它允許系統(tǒng)占用堆以外的內(nèi)存,速度是硬盤存儲的100倍,允許很大的存儲空間被創(chuàng)建(350G被測試過)

因為非堆數(shù)據(jù)是以字節(jié)流的形式存儲,所以要求Element的key和value都要是可以序列化的。

因為序列化和反序列化的過程,這種存儲形式比內(nèi)存存儲慢10倍

38.硬盤存儲

線程安全的

39.當(dāng)maxElementsOnDisk被設(shè)置的時候,硬盤上的存儲達到限制時,LFU算法會被執(zhí)行用于清除數(shù)據(jù),只能是該算法,不可配置

40.Persistence被設(shè)置成false或者omitted,當(dāng)系統(tǒng)重啟時,不會硬盤的數(shù)據(jù)存儲在硬盤上,.data文件將會被刪除.相反,.data文件不會被刪除,下次重啟后Cachemanager還可以使用.data文件。

41.虛擬機被停止的時候,強烈建議調(diào)用Cachemanager.shutdown()方法。

42.在關(guān)閉java虛擬機時,系統(tǒng)執(zhí)行以下步驟:

Considerations for guidance on how to safely shut the Virtual Machine down.

When a DiskStore is persisted, the following steps take place:

? Any non-expired Elements of the MemoryStore are flushed to the DiskStore

? Elements awaiting spooling are spooled to the data file

? The free list and element list are serialized to the index file

On startup the following steps take place:

? An attempt is made to read the index file. If it does not exist or cannot be read successfully, due to disk corruption, upgrade of ehcache, change in JDK version etc, then the data file is deleted and the DiskStore starts with no Elements in it.

? If the index file is read successfully, the free list and element list are loaded into memory. Once this is done, the index file contents are removed. This way, if there is a dirty shutdown, when restarted, Ehcache will delete the dirt index and data files.

? The DiskStore starts. All data is available.

? The expiry thread starts. It will delete Elements which have expired.

43.一個示范性地配置:

把一個擁有8G機器內(nèi)存的存儲分配成各種存儲。設(shè)想有一個7G的數(shù)據(jù)集,共7M個元素,每個元素1k大小。

我們設(shè)置1G的堆存儲和7G的非堆存儲:

java -Xms1G -Xmx1G -XX:maxDirectMemorySize=7G

對應(yīng)的配置文件為:

maxElementsInMemory=100

overflowToOffHeap="true"(企業(yè))

maxMemoryOffHeap="7G"

... />

44.對于第二種集群方法,以下服務(wù)器被測試過:

? Glassfish V2/V3

? Tomcat 6

? Jetty 6

Tomcat 6通過了所有的繼集成測試

支持Weblogic10.3.2,但是SOAP不兼容。

45.最大的Ehcache單實例在內(nèi)存中可以緩存20GB,最大的磁盤可以緩存100GB

46.關(guān)于ehcache server的相關(guān)命令用法在user guide的178頁

47.

緩存屬性:

緩存配置。

以下屬性是必須的:

name?-?cache的標(biāo)識符,在一個CacheManager中必須唯一

maxElementsInMemory?-?在內(nèi)存中緩存的element的最大數(shù)目

maxElementsOnDisk?-?在磁盤上緩存的element的最大數(shù)目

eternal?-?設(shè)定緩存的elements是否有有效期。如果為true,timeouts屬性被忽略

overflowToDisk?-?設(shè)定當(dāng)內(nèi)存緩存溢出的時候是否將過期的element緩存到磁盤上

以下屬性是可選的:

timeToIdleSeconds?-?緩存element在過期前的空閑時間。默認為0,表示可空閑無限時間. (如果指定了這個時間,是否在被hit的前超過了這個時間就會被remove?在內(nèi)存緩存數(shù)目超限之前不會被remove)

timeToLiveSeconds?-?緩存element的有效生命期。這個類似于timeouts,默認為0,不過期(是否通常情況下應(yīng)該大于等于timeToIdleSeconds,小于會如何?idle時間也會減小和這個數(shù)值一樣)

diskPersistent?-?在VM重啟的時候是否持久化磁盤緩存,默認是false。

(測試一下true的情況?重載vm的時候會從磁盤進行序列化到對象)

diskExpiryThreadIntervalSeconds?-?磁盤緩存的清理線程運行間隔,默認是120秒. ?(測試一下0的時候會如何)

memoryStoreEvictionPolicy?-?當(dāng)內(nèi)存緩存達到最大,有新的element加入的時候,移除緩存中element的策略。默認是LRU,可選的有LFU和FIFO可對緩存中的element配置諸如監(jiān)聽器和加載器。Ehcahe內(nèi)建了一些

*cacheEventListenerFactory?-?監(jiān)聽緩存中element的put,?remove,?update和expire事件

*bootstrapCacheLoaderFactory?-?啟動時加載緩存的element每個用來做分布式緩存都必須設(shè)定element的事件監(jiān)聽器,用來在各個CacheManager節(jié)點復(fù)制消息。

Ehcache內(nèi)建了基于RMI的實現(xiàn)?-?RMICacheReplicatorFactory

總結(jié)

以上是生活随笔為你收集整理的ehcache 默认大小_简单的使用ehcache的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。