官网地址: http://ehcache.org/
一、简介:
Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序
ehcache是一个用Java实现的使用简单,高速,实现线程安全的缓存管理类库,ehcache提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案。是Hibernate中默认的CacheProvider。
Ehcache的类层次模型主要为三层:
CacheManager:操作Ehcache的入口;管理着多个Cache
Cache:以一种类Hash的方式,关联着多个Elemenat
Element:存放缓存内容
我们可以通过CacheManager.getInstance()获得一个单个的CacheManager,或者通过CacheManager的构造函数创建一个新的CacheManager。
ehcache的刷新策略
ehcache的刷新策略是当缓存在放入的时候记录一个放入时间,它是用Lazy Evict的方式,在取的时候同设置的TTL比较TTL比较。
ehcache缓存的3种清空策略
FIFO,先进先出
LFU,最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。
LRU,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
ehcache特性:
二、简单配置:
pom中引入依赖:各版本依赖网址:http://www.mvnrepository.com/artifact/net.sf.ehcache/ehcache
ehcache.xml配置文件:
cache :自定义的缓存,可以包含多个cache节点
name : 缓存的名称,可以通过指定名称获取指定的某个Cache对象
maxElementsInMemory :内存中允许存储的最大的元素个数,0代表无限个
clearOnFlush:内存数量最大时是否清除。
eternal :设置缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。根据存储数据的不同,例如一些静态不变的数据如省市区等可以设置为永不过时
timeToIdleSeconds : 设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
timeToLiveSeconds :缓存数据的生存时间(TTL),也就是一个元素从构建到消亡的最大时间间隔值,只能在eternal=false对象不是永久有效时使用,如果该值是0就意味着元素可以停顿无穷长的时间。
overflowToDisk :内存不足时,是否启用磁盘缓存。
maxEntriesLocalDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
maxElementsOnDisk:硬盘最大缓存个数。
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
diskPersistent:是否在VM重启时存储硬盘的缓存数据。默认值是false。
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
三、获取配置对象:
创建缓存管理器CacheManager
1)默认配置
CacheManager cacheManager = CacheManager.create();
CacheManager cacheManager = CacheManager.newInstance();
2)ehcache.xml配置
CacheManager cacheManager = CacheManager.create("ehcache.xml")
CacheManager cacheManager = CacheManager.newInstance("ehcache.xml");
InputStream inputStream = new FileInputStream(new File("ehcache.xml"));
CacheManager cacheManager = CacheManager.newInstance(inputStream);
创建缓存Cache
Cache cache = cacheManager.getCache("menuCache");
创建元素
Element element = new Element("key", "value");
将元素添加到缓存
cache.put(element);
获取缓存
Element value = cache.get("key");
删除元素
cache.remove("key");
刷新缓存
cache.flush();
关闭缓存管理器
cacheManager.shutdown();
四、spring整合
注解使用:
@Cacheable(value="menuCache", key ="#key")
public List