目录

简介

EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。也是最流行的java缓存框架。

框架概览
7c190eee-cddf-3ab5-9a9d-fc9c94c1e7e8.jpg

核心定义:

  • cache manager:缓存管理器,以前是只允许单例的,不过现在也可以多实例了
  • cache:缓存管理器内可以放置若干cache,存放数据的实质,所有cache都实现了Ehcache接口
  • element:单条缓存数据的组成单位
  • system of record(SOR):可以取到真实数据的组件,可以是真正的业务逻辑、外部接口调用、存放真实数据的数据库等等,缓存就是从SOR中读取或者写入到SOR中去的。

特点

  • 多种缓存策略
  • 缓存数据有两级:内存和磁盘,因此无需担心容量问题
  • 支持缓存数据在虚拟机重启的过程中写入磁盘
  • 分布式:可以通过RMI、可插入API等方式进行分布式缓存
  • 具有缓存和缓存管理器的侦听接口

使用方法

单缓存管理器

CacheManager singletonManager = CacheManager.create();  
Cache memoryOnlyCache = new Cache("testCache", 5000, false, false, 5, 2);  
singletonManager.addCache(memoryOnlyCache);  
Cache cache = singletonManager.getCache("testCache");  
  
Element element = new Element("key1","value1");  
cache.put(element);  
Element value = cache.get("key1");  
  
System.out.println(value.getObjectValue());  
//value1  
System.out.println(value.toString());  
//[ key = key1, value=value1, version=1, hitCount=1, CreationTime = 1359130974484, LastAccessTime = 1359130974500 ]   

配置创建缓存

CacheManager manager = CacheManager.newInstance("ehcache.xml");  
Cache cache = manager.getCache("sampleCache1"); 
//使用方式同上

事务管理

Ehcache cache = cacheManager.getEhcache("xaCache");
transactionManager.begin();
try {
    Element e = cache.get(key);
    Object result = complexService.doStuff(element.getValue());
    cache.put(new Element(key, result));
    complexService.doMoreStuff(result);
    transactionManager.commit();
} catch (Exception e) {
    transactionManager.rollback();
}

配置讲解

<ehcache>
    <diskStore path="java.io.tmpdir"/>
    <!--
    强制默认缓存配置。这些设置将应用于缓存
    programmtically使用缓存管理器创建添加(字符串cachename)。
    -->
    <!--
       name:缓存名称。
       maxElementsInMemory:缓存最大个数。
       eternal:对象是否永久有效,一但设置了,timeout将不起作用。
       timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
       timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
       overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
       diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
       maxElementsOnDisk:硬盘最大缓存个数。
       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
       clearOnFlush:内存数量最大时是否清除。
    -->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
</ehcache>

参考:Ehcache详细解读