缓存之EHCache(第一个记录)

  • Post author:
  • Post category:其他






一、简介





非常简单,而且易用。



ehcache 是一个非常轻量级的缓存实现,而且从1.2 之后就支持了集群,而且是hibernate 默认的缓存provider。

ehcache

是一个纯Java的进程内缓存框架,具有快速、精干等特点,

是Hibernate中默认的CacheProvider






ehcache

可以直接使用。也可以和Hibernate对象/关系框架结合使用。还可以做Servlet缓存。



Cache 存储方式 :内存或磁盘。



官方网站:http://ehcache.sourceforge.net/




主要特征:




1. 快速.



2. 简单.



3. 多种缓存策略



4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题



5. 缓存数据会在虚拟机重启的过程中写入磁盘



6. 可以通过RMI、可插入API等方式进行分布式缓存



7. 具有缓存和缓存管理器的侦听接口



8. 支持多缓存管理器实例,以及一个实例的多个缓存区域



9. 提供Hibernate的缓存实现



10. 等等





二、快速上手





1、  项目类库中添加ehcache.jar;



2、  在类路径下编写ehcache.xml配置文件。





三、配置文件参数详解





ehcache.xml是ehcache的配置文件,并且存放在应用的classpath中。下面是对该XML文件中的一些元素及其属性的相关说明:




<diskStore>元素:





指定一个文件目录,当EHCache把数据写到硬盘上时,将把数据写到这个文件目录下。 下面的参数这样解释:



user.home – 用户主目录



user.dir      – 用户当前工作目录



java.io.tmpdir – 默认临时文件路径




<defaultCache>元素:





设定缓存的默认数据过期策略。




<cache>元素:





设定具体的命名缓存的数据过期策略。



<cache>元素的属性




name:





缓存名称。通常为缓存对象的类名(非严格标准)。




maxElementsInMemory:





设置基于内存的缓存可存放对象的最大数目。




maxElementsOnDisk:





设置基于硬盘的缓存可存放对象的最大数目。




eternal:





如果为true,表示对象永远不会过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds属性,默认为false;




timeToIdleSeconds:





设定允许对象处于空闲状态的最长时间,以秒为单位。当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期。当对象过期,EHCache将把它从缓存中清空。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地处于空闲状态。




timeToLiveSeconds:





设定对象允许存在于缓存中的最长时间,以秒为单位。当对象自从被存放到缓存中后,如果处于缓存中的时间超过了 timeToLiveSeconds属性值,这个对象就会过期。当对象过期,EHCache将把它从缓存中清除。只有当eternal属性为false,该属性才有效。如果该属性值为0,则表示对象可以无限期地存在于缓存中。

timeToLiveSeconds必须大于timeToIdleSeconds属性,才有意义。





overflowToDisk:





如果为true,表示当基于内存的缓存中的对象数目达到了maxElementsInMemory界限后,会把益出的对象写到基于硬盘的缓存中。注意:如果缓存的对象要写入到硬盘中的话,则该对象必须实现了Serializable接口才行。




memoryStoreEvictionPolicy:





缓存对象清除策略。有三种:



1 FIFO ,first in first out ,这个是大家最熟的,先进先出,不多讲了



2 LFU , Less Frequently Used ,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。



2 LRU ,Least Recently Used ,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。


转载于:https://my.oschina.net/heroShane/blog/204395