Ehcache学习简介与实例

Posted 李晓娜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ehcache学习简介与实例相关的知识,希望对你有一定的参考价值。

 Ø  简介

  概念

  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的缓存功能。


以上是关于Ehcache学习简介与实例的主要内容,如果未能解决你的问题,请参考以下文章

Ehcache学习ehcache与springAOP拦截器实例

Ehcache学习ehcache与spring注解实例

Ehcache缓存实例

Ehcache基础知识学习

EhCache RMI 分布式缓存/缓存集群

EhCache RMI 分布式缓存/缓存集群