Chinaunix首页 | 论坛 | 博客
  • 博客访问: 493290
  • 博文数量: 78
  • 博客积分: 1271
  • 博客等级: 中尉
  • 技术积分: 1108
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-14 14:39
文章分类

全部博文(78)

文章存档

2015年(2)

2014年(6)

2013年(15)

2012年(18)

2011年(37)

分类: Java

2012-04-08 21:00:17

hibernate的二级缓存由第三方插件提供,比如EhCache、OsCache、SwarmCache及JBossTreeCache等,在本文中,只会对EhCache的配置作简介。

  首先要明确一点,并不是所有类都应该使用二级缓存,经常读取而修改比较少的类才适合使用二级缓存的,我们一定要对启用二级缓存的类分析清楚。

  要使用二级缓存,主要有两步工作:
  1.为相应的类选择合并的并发策略;
  2.配置第三方缓存插件。

  1.并发访问策略
   1.1只读(read-only): 对于永远不会被修改的数据可以采用这种并发访问策略,它的并发性能是最高的。但必须保证数据不会被修改,否则就会出错。
    1.2非严格读写(nonstrict-read-write): 非严格读写不能保证缓存与数据库中数据的一致性,如果存在两个事务并发地访问缓存数据的可能,则应该为该数据配置一个很短的过期时间,以减少读脏数据的可能。对于极少被修改,并且可以容忍偶尔脏读的数据可以采用这种并发策略。
    1.3读写(read-write): 读写策略提供了“read committed"数据库隔离级别。对于经常被读但很少修改的数据可以采用这种策略,它可以防止读脏数据。
    1.4事务(transactional): 它提供了Repeatable Read事务隔离级别。它可以防止脏读和不可重复读这类的并发问题。

   在这里,只读是性能最高的二级缓存,越往后二级缓存在性能上的提高越低。EhCache是不支持事务级的并发策略。

   例如:我们指定Category类使用read-write策略
   @Entity
   @Table(name = "CATEGORY")
   @org.hibernate.annotations.Cache(usage =
         org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE
    )
    public class Category { ... }


  2.配置第三方缓存插件
     设置provider:
     hibernate.cache.provider_class = org.hibernate.cache.EhCacheProvider
     设置开启二级缓存:
     hibernate.cache.use_second_level_cache=true
     如果有多个SessionFactory,则需要设置相应的缓冲区域前缀:
     hibernate.cache.region_prefix=db1

     在ehcache.xml配置文件中,对缓冲的类进行相应的设置,如下例所示:
                     maxElementsInMemory="500"
                 eternal="true"
                 timeToIdleSeconds="0"
                 timeToLiveSeconds="0"
                overflowToDisk="false"
      />
      name对应的是缓冲区域名,在单个SessionFactory情况下,它就是类的全路径名称,如果有前缀则加上前缀,例如:db1.auction.model.Category
     etermal指的是即使过期都仍然在缓存中;
     timeToIdleSeconds,对象进入缓存后,最后一次被使用后,空闲的时间间隔,超过时间即认为过期;
     timeToLiveSeconds,从对象进入缓存开始算,在缓存中的存活时间,超过该时间,即认为过期;

 ehcache.txt  

 log4j.txt  


阅读(3021) | 评论(2) | 转发(1) |
0

上一篇:VI快捷键总结

下一篇:JNA有感

给主人留下些什么吧!~~

baohuan_love2013-12-09 13:17:40

感谢分享

无色T恤2012-04-10 02:21:07

二级缓存3MB左右比较好吧