`
guoshaobin
  • 浏览: 14430 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

理解Session缓存

阅读更多
理解Session的缓存
当Session的save()方法持久化一个Customer对象是,Customer对象被加入到Session的缓存中,以后即使应用程序中的引用变量不再引用Customer对象,只要Session的缓存还没有被清空,Customer对象仍然处于生命周期中。
当Session的load()方法试图从数据库中加载一个Customer对象时,Session先判断缓存中是否已经存在这个Customer对象,如果存在,就不需要再到数据库中检索。

调用了Session的某个方法,例如save()方法就纳入到缓存里面。那个Session就会存在一个引用去指向这个对象,这时候这个对象就不会被收集器所收掉。当Session被关闭掉之后,某个引用就不再指向他了,那么这个对象可能给垃圾回收机制所回收。


Session的缓存作用
减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。
保证缓存中的对象与数据库中的相关记录保存同步。当缓存中持久化对象的状态发生了变化,Session并不会立即执行相关的sql语句,这使得Session能够把几条相关的sql语句合并为一条sql语句,以便减少访问数据库的次数,从而提高应用程序的性能。

Session清理缓存
清理缓存是指按照缓存中对象的状态的变化来同步更新数据库。


当Session执行事物的提交的时候就会自动执行update语句(commit()),使得内存中对象与数据库中的记录信息一致,使得更新能几时提交到数据库中。

清理缓存的时间点
Session在下面的时间点清理缓存:
—当应用程序调用org.hibernate.Transaction的commit()方法的时候,commit()方法先清理缓存,然后在向数据库提交事物。
—当应用程序显式调用Session的flush()方法的时候。

Hibernate的二级缓存结构

Hibernate提供了两级缓存,第一级缓存是Session的缓存。由于Session对象的生命周期通常对应一个数据库事物或者一个应用事物,因此它的缓存是事物范围的缓存。第一级缓存是必须的,不允许而且事实上也无法被卸除。在第一级缓存中,持久化类的每个实例都具有唯一的OID。

第二级缓存是一个可插拔的缓存插件,他由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个进程对应,因此第二级缓存是进程范围的缓存。这个缓存中存放的是对象的散装数据。第二级缓存是可选的,可以在每个类或每人集合的粒度上配置第二级缓存。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics