Ehcache API的使用和注意点

目录


创建CacheManager

CacheManager常用的API

创建Cache

Cache常用的API

创建Element

Element常用的API

 

 


 

 

配置文件

  配置文件名为ehcache.xml,存放在classpath路径下。

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
	name="myDefaultCacheManager"
	>

	<diskStore path="/home/ganlixin/tmp" />
	
	<!-- 默认的cache -->
	<defaultCache
		maxEntriesLocalHeap="200"
		maxEntriesLocalDisk="300"
		maxElementsInMemory="1000" 
		eternal="false"
		timeToIdleSeconds="60" 
		timeToLiveSeconds="60" 
		overflowToDisk="true"
		memoryStoreEvictionPolicy="LRU"
	/>

	<cache name="cacheOne" 
	
		maxEntriesLocalHeap="200"
		maxEntriesLocalDisk="300"
		
		maxElementsInMemory="1000" 
		eternal="false"
		timeToIdleSeconds="60" 
		timeToLiveSeconds="60" 
		overflowToDisk="true"
		memoryStoreEvictionPolicy="LRU"
	/>
	
	<cache name="cacheTwo" 
		maxEntriesLocalHeap="200"
		maxEntriesLocalDisk="300"
		eternal="false"
		timeToIdleSeconds="60" 
		timeToLiveSeconds="60" 
		overflowToDisk="true"
		memoryStoreEvictionPolicy="LRU"
	/>
</ehcache>

    

 

创建CacheManager

  总的来说分为两种方式,一种是调用CacheManager.create(),另一种是调用CacheManager.newInstance()。两种方式的示例如下:

// 方式一
CacheManager cacheManager = CacheManager.create("ehcache.xml");

// 方式二
InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("ehcache.xml");
CacheManager cacheManager = CacheManager.newInstance(inputStream);

  除了上面的使用方式,这两个API都支持不传入参数,也就是不需要传入配置文件的路径和文件名,但是此时,要求之前已经创建过CacheManager,此次调用API获得的API就是之前创建的CacheManager。这也就说明:这两种方式创建的CacheManager是单例的,但是这个单例是这样的,只要使用同一个配置文件创建的CacheManager,那么他们就是相同的;如果他们不是一个配置文件创建的,那他们就不是相同的

InputStream inputStream = One.class.getClassLoader().getResourceAsStream("ehcache.xml");
CacheManager cacheManager = CacheManager.newInstance(inputStream);
System.out.println(cacheManager == CacheManager.newInstance()); // true
System.out.println(cacheManager == CacheManager.create());		// true

  除此之外,还可以使用下面这个API来获取上下文中创建的CacheManager:

CacheManager.getInstance();  // 返回的仍旧是之前的CacheManager(单例的)

  

 

CacheManager常用的API

  静态方法

   CacheManager的静态方法主要就是create()、newInstance()、getInstance()这三个API用来获取CacheManager实例。

   CacheManager.getCacheManager("name"),可以获取指定名称的CacheManager(因为<ehcache>标签中可以设置name属性),如果没有设置,那么name就是_DEFAULT_。

 

  实例方法

  cacheManager.addCache(cache)可以在程序中动态的添加cache。

  cacheManager.cacheExists("name")可以用来判断读取的配置文件中是否有指定name的cache项。

  cacheManager.clearAll(); 删除CacheManager管理的所有cache中的内容,但是并不删除cache。

  cacheManager.getCacheNames();用来获取配置文件中配置的所有cache(<cache>)的name。

  cacheManager.getCache("name");获取配置文件中名称为name的cache。

  cacheManager.getName();获取配置文件中<ehcache>的name属性值(也就是CacheManager的名称)

  cacheManger.shutdown();关闭CacheManager。

  ....................

 

创建Cache

  创建Cache对象,需要使用CacheManager,最常用的方式莫过于下面一行代码:

Cache cache = cacheManager.getCache("cacheOne");

  只需要传入<cache>中的name值,就可以获取对应的cache。

 

 

Cache常用的API

  cache的最常用的莫过于元素的增删改查了

  增加Element

void cache.put(element e);

    

  删除Element

boolean cache.remove(key);
boolean cache.removeElement(element e)
Element cache.removeAndReturnElement(key);
void cache.removeAll();
void cache.removeAll(final Collection<?> keys)

  

  修改Element

cache.replace(element)
cache.replace(old_e, element)

  

  查询获得Element

Element cache.get(key);
Map<Object, Element> cache.getAll(Collection<?> keys);
...还有很多api,包括获取cache中元素的数量、修改时间、缓存命中次数....

  

 

创建Element

Element e = new Element(key, value);
Element e = new Element(key, value, version);

  在创建Element的时候,key、value可以是任意数据类型(Object或者是Serializable接口的实现类)。

  通过cache.get(key)也可以获取Element。

 

 

Element常用的API

  主要就是在从cache中获取Element之后,获取Element的信息:

Element e = cache.get(key);
e.getObjectKey();  // 不推荐使用e.getKey()
e.getObjectValue(); // 不推荐使用e.getValue()
e.getHitCount();
e.getVersion();
e.getCreationTime();
e.getLastAccessTime();
e.getLastUpdateTime();
e.getTimeToIdle();
e.getTimeToLive();

  

 

posted @ 2019-05-17 14:17 寻觅beyond 阅读(...) 评论(...) 编辑 收藏
Flag Counter