论坛首页 Java企业应用论坛

HIbernate 缓存机制

浏览 6690 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2011-02-22   最后修改:2011-03-02
Cache主要是为了提高系统的性能的。HIbernate由于直接JDBC的一个方面就是因为它的缓冲机制。Hibernate有两级缓存。
第一级缓存就是事务级缓存。很重要也是必须的。这一级缓存的对象是在persistence context中缓存的持久化对象。这级缓存可以保证对应于数据库同一行的对象只有一个实例。因此不存在并发的问题。
第二级缓存是进程级别的缓存。这里缓存的对象为同一个session factory生成的所有persistence context共享。因为是多线程共享,所以存在并发的问题。同一个对象在不同的persistence context里也是不同的copy。基于并发的原因,只有那些经常被读取,而
很少被变更的对象才适合进入这一级缓存。所以,这一级缓存是可选的,并且可以配置到具体的class以及class里面的集合属性。

在配置hibernate缓存的时候有两步。第一步是并发策略,有四种:Transactional,Read-write,Nonstrict-read-write和Read-only。依次并发要求越来越松,性能也越来越好。要根据要缓存对象的特性选择。第二步是选择物理的cache-provider。通常是EHCache, OSCache还有JbossCache等。不同的provider也不一定支持全部的并发策略,要注意选择。根据不同的对象特性,在cache-provider的配置里,也要配置不同的缓冲策略,包括
缓存数量,要不要disk缓存,闲置丢出时间以及超时时间等等。

最为典型的可以被缓存的例子就是产品目录Category。产品目录一般记录比较少,很少修改,几周甚至几个月才可能被修改。这样的对象又经常被查看和检索。我们就需要将所有的Category记录缓存在二级缓存里面。并发策略可以用Nonstrict-read-write。

=====================================================
欢迎大家一起讨论,我会持续总结更新。。。
=====================================================

   发表时间:2011-02-24  
good article
0 请登录后投票
   发表时间:2011-02-24  
lz先解释一下到底缓存缓存那些??
0 请登录后投票
   发表时间:2011-02-24  
对于百万数据级的以查询为主的应用,lz认为并发与缓存的策略应该从哪方面考虑呢
:)
0 请登录后投票
   发表时间:2011-02-24  
liuxuejin 写道
lz先解释一下到底缓存缓存那些??


我在原文中更新了一些,看看是否有帮助。
0 请登录后投票
   发表时间:2011-02-24  
landslide 写道
对于百万数据级的以查询为主的应用,lz认为并发与缓存的策略应该从哪方面考虑呢
:)


这个问题比较大,欢迎大家一起出主意。我的建议是要考虑:
既然是查询为主,如果更新很少的话,就可以采用并发策略可以选择Nonstrict-read-write或Read-only。provider可以用OSCache。对于不同的访问频率的对象,设置不同的超时请出。缓存还要充分考虑对内存的占用,内存总是不足的,要把那些数据量小,高度频繁访问,又影响整体性能的对象缓存在内存里面。注意一个系统的性能是由最慢的那个部分决定的。
0 请登录后投票
   发表时间:2011-03-02  
赞同楼上的观点..
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics