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
----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------
?
?
?