草原孤狼的专栏

能记下点什么、就积点什么!!!

Java 缓存之 Ehcache 详解



一:EhCache是一个纯Java的进程内缓存框架,具有如下特点:
    1. 快速简单,非常容易和应用集成。
    2.支持多种缓存策略 。
    3. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 。
    4. 缓存数据会在虚拟机重启的过程中写入磁盘 。
    5. 可以通过RMI、可插入API等方式进行分布式缓存。
    6. 具有缓存和缓存管理器的侦听接口 。
    7. 支持多缓存管理器实例,以及一个实例的多个缓存区域 等特点。

 下载地址:
http://sourceforge.net/projects/ehcache/files/
在线文档:
http://tool.oschina.net/apidocs/apidoc?api=ehcache2.5.2


二:cache.xml文件简介


xml文件配置:     
      <ehcache>
   <!-- 指定一个文件目录,当EHCache把数据写到硬盘上时,将把数据写到这个文件目录下 -->           
   <diskStore path="java.io.tmpdir"/>           
   <!-- 设定缓存的默认数据过期策略 -->           
   <defaultCache  maxElementsInMemory="10000"  eternal="false"  overflowToDisk="true" timeToIdleSeconds="0"
   timeToLiveSeconds="0" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"/>        
   <!--自己缓存设置-->
   <cache name="TESTCACHE" maxElementsInMemory="1000" eternal="true" overflowToDisk="true"/>       
   </ehcache>

      ehcache.xml元素的属性:
     name:缓存名称

        maxElementsInMemory:内存中最大缓存对象数

       maxElementsOnDisk:硬盘中最大缓存对象数,若是0表示无穷大

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

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

       diskSpoolBufferSizeMB:磁盘缓存区大小,默认为30MB。每个Cache都应该有自己的一个缓存区。

       diskPersistent:是否缓存虚拟机重启期数据

       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒.

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

                                 有效。如果该属性值为0,则表示对象可以无限期地处于空闲状态

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

                                 效。如果该属性值为0,则表示对象可以无限期地存在于缓存中。timeToLiveSeconds必须大于timeToIdleSeconds属性,才有意义.

       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)。


三:Cache的数据淘汰策略


FIFO :first in first out ,这个是大家最熟的,先进先出。
LFU : Less Frequently Used ,一直以来最少被使用的将被清除,缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。
LRU (默认):Least Recently Used ,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,
 而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存.


四:缓存数据存储位置:


 内存和磁盘;缓存数据会在虚拟机重启的过程中写入磁盘

根据需要将缓存刷到磁盘。将缓存条目刷到磁盘的操作可以通过cache.flush()方法来执行.;

在创建cache的时候,指定了存储在硬盘上也是ok 的,不过没有这个直观。


五:创建Cache的方式以及使用:


A:使用默认配置文件创建:


java代码:
CacheManager manager = CacheManager.create(); 

B:使用指定配置文件创建:


java代码:
CacheManager manager = CacheManager.create("src/config/ehcache.xml"); 

C:从classpath中找寻配置文件并创建:


java代码:
URL url = getClass().getResource("/anothername.xml"); 
CacheManager manager = CacheManager.create(url); 

D:通过输入流创建:


java代码:
InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath()); 
try { 
manager = CacheManager.create(fis); 
} finally { 
fis.close(); 


E:卸载CacheManager ,关闭Cache :


java代码:
manager.shutdown(); 

F:使用Caches :


取得配置文件中预先 定义的sampleCache1设置,通过CacheManager生成一个Cache
java代码:
Cache cache = manager.getCache("demoCache");

G:设置一个名为test 的新cache,test属性为默认:


java代码:
CacheManager manager = CacheManager.create(); 
manager.addCache("test"); 

H:设置一个名为test 的新cache,并定义其属性:


java代码:
//CacheManager manager = CacheManager.create(); 
Cache cache = new Cache("test", 1, true, false, 5, 2); 
manager.addCache(cache); 

I:往cache中加入元素:


java代码:
Element element = new Element("key1", "value1");   

J:从cache中取得元素:


java代码:
Element element = cache.get("key1");  

第一步:生成CacheManager对象
第二步:生成Cache对象
第三步:向Cache对象里添加由key,value组成的键值对的Element元素



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/supingemail/article/details/45365521
文章标签: ehcahe cache Java
个人分类: Cache Java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭