Cache系列Ehcache

一:分层:
Ehcache的类层次模型主要为三层,最上层的是CacheManager,他是操作Ehcache的入口;
1:CacheManager层
1.1:获取CacheManager
CacheManager.getInstance();
或者
CacheManager cachemanager = new CacheManager();

2:Cache层
每个CacheManager都管理着多个Cache。

3:Elemenat层
而每个Cache都以一种类Hash的方式,关联着多个Elemenat。而Element则是我们用于存放要缓存内容的地方。

二:ehcache清空策略
ehcache缓存的3种清空策略:
1 FIFO,先进先出
2 LFU,最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。
3 LRU,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。

三:事件处理
可以为CacheManager添加事件监听,当对CacheManager增删Cache时,事件处理器将会得到通知。
要配置事件处理,需要通过ehcache的配置文件来完成。

四:实现步骤:
1:hibernate+EhCache配置二级缓存
1.1:Cache的多种配置方法
Javabean cache的配置有三种,下面将一一介绍,具体如下:
(1).bean中注解配置的方式: @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
(2).hibernate.cfg.xml中标签配置方式: <class-cache class="" usage="" />
(3).映射文件*.hb.xml中标签配置方式: <cache usage=" />

1.2:hibernate配置文件配置
<!--  
<property name="hibernate.cache.region.factory_class"> 
    net.sf.ehcache.hibernate.EhCacheRegionFactory  
</property> 
<property name="hibernate.cache.region.factory_class"> 
    net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory  
</property> 
--> 
<!-- hibernate3.0-3.2 cache config--> 
<!--   
<property name="hibernate.cache.region.factory_class"> 
    net.sf.ehcache.hibernate.EhCacheProvider  
</property> 
--> 
<property name="hibernate.cache.provider_class"> 
    net.sf.ehcache.hibernate.SingletonEhCacheProvider  
</property> 
  
<!-- Enable Second-Level Cache and Query Cache Settings --> 
<property name="hibernate.cache.use_second_level_cache"> 
    true  
</property> 
<property name="hibernate.cache.use_query_cache"> 
    true  
</property> 

<!-- class-cache config --> 
<class-cache class="michael.cache.ehcache.hibernate.EhBlogTopic" 
    usage="read-write" />


1.3:JavaBean注解配置
1.3.1:
@Entity 
@Table(name = "MY_TB_EH_BLOG_TOPIC2")  
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)  
public class EhBlogTopic2 implements Serializable {  
     //属性和EhBlogTopic一样  
    //其他省略  

1.3.2:缓存策略
•read-only ----无需修改, 可以对其进行只读缓存;
•read-write ---需要更新数据,那么使用读/写缓存比较合适;
•nonstrict-read-write ----只偶尔需要更新数据(也就是说,两个事务同时更新同一记录的情况很不常见),也不需要十分严格的事务隔离,那么比较适合使用非严格读/写缓存策略;
•transactional

1.4:xxx.hbm.xml中配置缓存
<class name="EhBlogTopic3" table="MY_TB_EH_BLOG_TOPIC3"> 
<cache usage="read-write" /> 
<id name="id" type="int" unsaved-value="null"> 
      <generator class="increment" /> 
 </id>
.....

1.5:程序中调用
Cache myCache1 = CacheManager.getInstance().getCache("michael.cache.ehcache.hibernate.EhBlogTopic");  

1.6:应用范围
1.6.1:实体类@cacheable
@Entity @Cacheable
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Forest { ... }

1.6.2:集合类@cacheable
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public SortedSet<Ticket> getTickets() {
    return tickets;
}

 


 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tony168hongweigan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值