Ø 简介
概念
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,JavaEE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。
特点
存储快速,简单易用,采用多种缓存策略;
缓存数据存在两级:内存和硬盘存储
并且可以通过RMI实现分布式缓存也就是缓存共享
具有缓存和缓存管理器的侦听接口等等。
Ø 实例讲解
我们来进行一个简单例子的讲解,将值写入到缓存中之后取出。看一下缓存管理器之类的如何创建等等。
EHCache 的类层次模型
主要为三层,
(1)最上层的是 CacheManager,它是操作 Ehcache的入口。我们可以通过CacheManager.getInstance()获得一个单子的 CacheManger, 或者通过 CacheManger 的构造函数创建 一个新的 CacheManger。
(2)每个 CacheManager 都管理着多个 Cache。
(3)而每个Cache 都以一种类 Hash 的方式,关联着多个 Element。 Element 则是我们用于存放要缓存内容的地方。
实例创建
<span style="font-family:Microsoft YaHei;font-size:14px;">private static final Logger logger = LoggerFactory.getLogger(EncacheTest.class);
private static CacheManager cacheManager;
static String cacheName="myCache";
public static void main( String[] args ) {
cacheManager=CacheManager.create();
cacheManager.addCache(cacheName);
encacheUseTest();
}
private static void encacheUseTest(){
Cache cache=cacheManager.getCache(cacheName);
String key="key1";
String value="value1";
cache.put(new Element(key,value));
Element element =cache.get(key);
System.out.println(element); //输出设定的key的值
logger.info("我的第一个cache实例创建"+cacheName);
}</span>
CacheManager的其他创建方式
当我们拷贝其ehcache-failsafe.xml并且改名为ehcache.xml的时候,实际上是自己定义一个ehcache的配置文件,使用默认的缓存配置文件可能不能完全满足我们的需要,一般情况下我们基本上不会直接使用默认的配置文件,而是会自己定义文件。
我们上面的使用创建CacheManager的方式是没有使用无参的方法,没有参数的时候使用的是默认的参数配置。
以我的为例,我的直接是放在了classpath路径下面:
所以我创建的时候使用的:
CacheManagermgr1 = CacheManager.create("/ehcache.xml");
当然我们可以我们可以先指定路径从而获取到url后,再进行创建
private staticfinal String path = "/ehcache.xml";
privateCacheManager manager;
privateEhcacheUtil(String path) {
url = getClass().getResource(path);
manager = CacheManager.create(url);
}
对比Class.getResource(String path)和Class.getClassLoader().getResource(Stringpath)区别
(1)Class.getResource(String path)
path不以’/'开头时,默认是从此类所在的包下取资源;
path 以’/'开头时,则是从ClassPath根下获取;
(2)Class.getClassLoader().getResource(Stringpath)
path不能以’/'开头时;
path是从ClassPath根下获取;
两者关系:TestMain.class.getResource("/")== t.getClass().getClassLoader().getResource("")
除了上面的那种获取CacheManager的实例外,还有的就是使用下面的两种:
CacheManager mgr5 =CacheManager.getInstance();
CacheManager mgr6 =CacheManager.newInstance();
那么三者存在什么区别呢?
查看具体源码的时候我们会发现:
CacheManager.create()和CacheManager.getInstance()都会先判断singleton属性是否为null,如果为null则继续调用newInstance(),如果不为null则直接返回。
但是CacheManager.newInstance();不会判断 singleton是否为null,直接使用默认的ehcache-failsafe.xml,新建一个CacheManager对象。
CacheManager.create()和CacheManager.getInstance()当为空的时候,我们查看源码其实可以发现 CacheManager.getInstance()调用的是CacheManager.create()为空时则调用的是CacheManager.newInstance()。
至此关于ehcache的简单的使用完成,下节课我们将讲述使用spring注解与ehcache结合来使用ehcache的缓存功能。