目录
配置文件
配置文件名为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();