EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。
?
详情参见其官网站:http://ehcache.org/ ?
具体文件下载网站:http://sourceforge.net/projects/ehcache/files/
?
下面将用实际的Demo分类演示介绍EhCache的初步使用:
[一]、单例CacheManager 创建
????? 1.代码示例:
/** * @blog http://sjsky.iteye.com <br> * 单例CacheManager 创建 */ public static void testCreateSingleton() { // Create a singleton CacheManager using defaults System.out.println("Create a singleton CacheManager using defaults"); // CacheManager.create(); System.out.println("CacheManager.create() :=" + CacheManager.getInstance()); System.out.println("cacheNames length := " + CacheManager.getInstance().getCacheNames().length); CacheManager.getInstance().shutdown(); System.out.println("======================================="); // Create a singleton CacheManager using a configuration file System.out .println("Create a singleton CacheManager using a configuration file"); CacheManager singletonManager2 = CacheManager .create("src/main/java/michael/hibernate/cache/ehcache/ehcache.xml"); System.out.println("CacheManager.create(file) :=" + singletonManager2); System.out.println("cacheNames length := " + singletonManager2.getCacheNames().length); System.out .println("CacheManager.getInstance() == singletonManager2 :: " + (CacheManager.getInstance() == singletonManager2)); singletonManager2.shutdown(); // CacheManager.getInstance().shutdown(); System.out.println("======================================="); // Create a singleton CacheManager from a configuration resource in the // classpath. URL configurl = Thread.currentThread().getContextClassLoader() .getResource("michael/hibernate/cache/ehcache/ehcache.xml"); CacheManager singletonManager3 = CacheManager.create(configurl); System.out.println("CacheManager.create(url) :=" + singletonManager3); String[] cacheNames = singletonManager3.getCacheNames(); System.out.println("cacheNames length := " + cacheNames.length); for (String name : cacheNames) { System.out.println("name := " + name); } singletonManager3.shutdown(); // CacheManager.getInstance().shutdown(); }?
????? 2.运行结果:
Create a singleton CacheManager using defaults?
[二]、多个CacheManager 创建
????? 1.代码示例:
/** * @blog http://sjsky.iteye.com <br> * CacheManager 创建 */ public static void testCreateManager() { // Create a CacheManager instance using defaults CacheManager manager1 = new CacheManager(); System.out.println("new CacheManager() := " + manager1); String[] cacheNames = manager1.getCacheNames(); System.out.println("cacheNames length := " + cacheNames.length); for (String name : cacheNames) { System.out.println("name := " + name); } manager1.shutdown(); System.out.println("======================================="); // Create a CacheManager instance using a configuration file CacheManager manager2 = new CacheManager( "src/main/java/michael/hibernate/cache/ehcache/ehcache.xml"); System.out.println("new CacheManager(file) := " + manager2); System.out.println("cacheNames length := " + manager2.getCacheNames().length); manager2.shutdown(); System.out.println("======================================="); // Create a singleton CacheManager from a configuration resource in the // classpath. URL configurl = Thread.currentThread().getContextClassLoader() .getResource("michael/hibernate/cache/ehcache/ehcache.xml"); CacheManager manager3 = new CacheManager(configurl); System.out.println("new CacheManager(url) := " + manager3); System.out.println("cacheNames length := " + manager3.getCacheNames().length); for (String name : manager3.getCacheNames()) { System.out.println("name := " + name); } manager3.shutdown(); }?
????? 2.运行结果:
new CacheManager() := net.sf.ehcache.CacheManager@17653ae[三]、Cache的多种创建方式
????? 1.代码示例:?
/** * @blog http://sjsky.iteye.com <br> * Create Cache */ public static void testCreateCache() { System.out.println("add cache with defaults:"); CacheManager singletonManager = CacheManager.create(); singletonManager.addCache("myCache1"); Cache myCache1 = singletonManager.getCache("myCache1"); System.out.println(myCache1); System.out.println("add cache with new Cache(arg1,arg2...):"); Cache myMemoryCache = new Cache("myMemoryCache", 5000, false, false, 5, 2); singletonManager.addCache(myMemoryCache); System.out.println(singletonManager.getCache("myMemoryCache")); System.out.println("Create a Cache specifying its configuration:"); // Create a Cache specifying its configuration. int maxElements = 100; Cache myConfigCahce = new Cache(new CacheConfiguration("myConifgCahce", maxElements).memoryStoreEvictionPolicy( MemoryStoreEvictionPolicy.LFU).overflowToDisk(true).eternal( false).timeToLiveSeconds(60).timeToIdleSeconds(30) .diskPersistent(false).diskExpiryThreadIntervalSeconds(0)); singletonManager.addCache(myConfigCahce); System.out.println(singletonManager.getCache("myConifgCahce")); singletonManager.shutdown(); }?
????? 2.运行结果:
add cache with defaults:?
[四]、对Cache的CRUD的操作
????? 1.代码示例:
/** * @blog http://sjsky.iteye.com <br> * CRUD operations */ public static void testCacheElementCRUD() { CacheManager manager = null; try { manager = new CacheManager(); manager.addCache("MichaelInfo"); Cache myCache = manager.getCache("MichaelInfo"); System.out.println("manager.getCache :" + myCache); Element element = new Element("blog", "http://sjsky.javaeye.com"); myCache.put(element); System.out.println("cache put Element"); System.out.println("get Element value:= " + myCache.get("blog").getValue()); System.out.println("get Element objectvalue:= " + myCache.get("blog").getObjectValue()); System.out.println("update the Element"); myCache.put(new Element("blog", "http://sjsky.iteye.com")); System.out.println("get Element value:= " + myCache.get("blog").getValue()); System.out.println("get Element objectvalue:= " + myCache.get("blog").getObjectValue()); myCache.put(new Element("array", new String[] { "test", "array" })); System.out.println("array value:= " + myCache.get("array").getValue()); myCache.remove("array"); if (null == myCache.get("array")) { System.out.println("remove Element 'array' successful."); } } catch (Exception e) { e.printStackTrace(System.out); } finally { if (null != manager) { manager.shutdown(); } } }?
????? 2.运行结果:
?
manager.getCache :[ name = MichaelInfo status = STATUS_ALIVE eternal = false overflowToDisk = true maxElementsInMemory = 100 maxElementsOnDisk = 100 memoryStoreEvictionPolicy = LRU timeToLiveSeconds = 120 timeToIdleSeconds = 120 diskPersistent = false diskExpiryThreadIntervalSeconds = 120 cacheEventListeners: net.sf.ehcache.statistics.LiveCacheStatisticsWrapper hitCount = 0 memoryStoreHitCount = 0 diskStoreHitCount = 0 missCountNotFound = 0 missCountExpired = 0 overflowToOffHeap = false maxMemoryOffHeap = null ]?
[五]、Cache的统计信息
????? 1.代码示例:
/** * @blog http://sjsky.iteye.com <br> * cache 信息统计 */ public static void testCacheStatistics() { CacheManager manager = null; try { manager = new CacheManager(); manager.addCache("MichaelInfo"); Cache myCache = manager.getCache("MichaelInfo"); myCache.put(new Element("username", "Michael")); myCache.put(new Element("sex", "男")); myCache.put(new Element("date", new Date())); myCache.put(new Element("height", 172)); myCache.put(new Element("position", "cto")); myCache.put(new Element("blog", "http://sjsky.iteye.com")); System.out.println("cache size := " + myCache.getSize()); System.out.println("MemoryStoreSize := " + myCache.getMemoryStoreSize()); System.out .println("DiskStoreSize := " + myCache.getDiskStoreSize()); myCache.getStatistics().getDiskStoreObjectCount(); System.out.println("Caceh getStatistics:"); Statistics statistics = myCache.getStatistics(); System.out.println("CacheHits := " + statistics.getCacheHits()); System.out.println("CacheMisses := " + statistics.getCacheMisses()); System.out.println("InMemoryHits := " + statistics.getInMemoryHits()); System.out.println("InMemoryMisses := " + statistics.getInMemoryMisses()); System.out.println("OnDiskHits := " + statistics.getOnDiskHits()); System.out.println("OnDiskMisses := " + statistics.getOnDiskMisses()); System.out.println("MemoryStoreObjectCount := " + statistics.getMemoryStoreObjectCount()); System.out.println("DiskStoreObjectCount := " + statistics.getDiskStoreObjectCount()); Element element = myCache.get("username"); System.out.println("Element HitCount := " + element.getHitCount()); } catch (Exception e) { e.printStackTrace(System.out); } finally { if (null != manager) { manager.shutdown(); } } }?
????? 2.运行结果:
cache size := 6?这次初步的简单使用就讲到这,下面一节讲EhCache和Hibernate的集成应用。
?
本文连接:http://sjsky.iteye.com/blog/1288257
?
?
转载请注明来自:Michael's blog @ http://sjsky.iteye.com
----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------
?
?
?