ehcache简介

Ehcache的主要特性和集群方案 
EHCache EHCache 是一个纯java的在进程中的缓存,是Hibernate中默认的CacheProvider,最小的依赖性,全面的文档和测试,最新版本为2.0.1。 
 缓存应用在多个领域并发挥作用,ehcache可应用于数据库访问缓存,安全认证缓存,web缓存,soap 和 RESTFul 服务缓存,应用程序持久对象缓存以及分布式缓存。 

(1)EhCache 的主要特性有: 

    a) 快速;

    b) 简单;  

    c) 多种缓存策略;  

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

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

    f) 可以通过 RMI、可插入 API 等方式进行分布式缓存; 

    g) 具有缓存和缓存管理器的侦听接口;  

  h) 支持多缓存管理器实例,以及一个实例的多个缓存区域;

  i) 提供 Hibernate 的缓存实现;  

  
(2)EhCache 从 1.7 版本后,支持五种集群方案,分别是: 

   a) Terracotta  

   b) RMI 

    c) JMS  

  d) JGroups  

  e) EhCache Server

 (3)配置说明 
1、  项目类库中添加ehcache.jar; 
2、  在类路径下编写ehcache.xml配置文件。  


(4)配置文件参数详解 
ehcache.xml是ehcache的配置文件,并且存放在应用的classpath中。下面是对该XML文件中的一些元素及其属性的相关说明:  
<diskStore>元素:指定一个文件目录,当EHCache把数据写到硬盘上时,将把数据写到这个文件目录下。 

下面的参数这样解释:     

1. user.home – 用户主目录     
2. user.dir      – 用户当前工作目录    

3. 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接口才行。

 Ehcache的层次模型 
Ehcache的类层次模型主要为三层,最上层的是CacheManager,他是操作Ehcache的入口。我们可以通过CacheManager.getInstance()获得一个单子的CacheManger,或者通过CacheManger的构造函数创建  一个新的CacheManger。 
每个CacheManager都管理着多个Cache。而每个Cache都以一种类Hash的方式,关联着多个Element。 
Element(键值对)则是我们用于存放要缓存内容的地方。  
 Hibernate的二级缓存策略 
Hibernate的二级缓存策略的一般过程如下  
1)条件查询的时候,总是发出一条select * from table_name where ....  (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。 2) 把获得的所有数据对象根据ID放入到第二级缓存中。 
3)当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。  
4 )删除、更新、增加数据的时候,同时更新缓存。 
    Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。 为此,Hi bernate提供了针对条件查询的Query Cache。 
 Ehcache的三种清空策略 
1 :FIFO,first in first out,这个是大家最熟的,先进先出。  
2 :LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用
的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。  
3 :LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又
需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值