<!--==S 模塊標題-->
<!--==S 投票--><!--==E 投票--><!--S 文章(這部分加style只是為了看效果,基本上表現都受編輯器設置控制)-->
![]() ![]()
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 ); ????????????????} ???????????????? ????????????????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);???? ????????????} ????????} <!--v:3.2--> ![]() |
<script type="text/javascript"></script><script src="/qzone/newblog/v5/script/newubb.js" type="text/javascript"></script><script src="/qzone/newblog/v5/script/content.js" type="text/javascript"></script><script type="text/javascript"></script>
loading......
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
