浏览 6718 次
锁定老帖子 主题:HIbernate 缓存机制
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2011-02-22
最后修改:2011-03-02
第一级缓存就是事务级缓存。很重要也是必须的。这一级缓存的对象是在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。 ===================================================== 欢迎大家一起讨论,我会持续总结更新。。。 ===================================================== 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-02-24
good article
|
|
返回顶楼 | |
发表时间:2011-02-24
lz先解释一下到底缓存缓存那些??
|
|
返回顶楼 | |
发表时间:2011-02-24
对于百万数据级的以查询为主的应用,lz认为并发与缓存的策略应该从哪方面考虑呢
:) |
|
返回顶楼 | |
发表时间:2011-02-24
liuxuejin 写道 lz先解释一下到底缓存缓存那些??
我在原文中更新了一些,看看是否有帮助。 |
|
返回顶楼 | |
发表时间:2011-02-24
landslide 写道 对于百万数据级的以查询为主的应用,lz认为并发与缓存的策略应该从哪方面考虑呢
:) 这个问题比较大,欢迎大家一起出主意。我的建议是要考虑: 既然是查询为主,如果更新很少的话,就可以采用并发策略可以选择Nonstrict-read-write或Read-only。provider可以用OSCache。对于不同的访问频率的对象,设置不同的超时请出。缓存还要充分考虑对内存的占用,内存总是不足的,要把那些数据量小,高度频繁访问,又影响整体性能的对象缓存在内存里面。注意一个系统的性能是由最慢的那个部分决定的。 |
|
返回顶楼 | |
发表时间:2011-03-02
赞同楼上的观点..
|
|
返回顶楼 | |