当前位置: 首页>编程语言>正文

session放入缓存中 session缓存的作用

Session 缓存概述
Session级别的缓存是Hibernate的一级缓存,主要提供事务级别的缓存处理,用来提高访问数据库的性能等.

在Session的接口实现中包含一系列的java集合,这些集合构成了Session的缓存.

只要Session实例没有结束生命周期,存放在它缓存中的对象也不会结束生命周期.

当Session 通过save()方法持久化一个对象时,这个对象被加入到Session缓存中去, 这以后,只要缓存没有被清空,这个对象就被存储在Session的集合对象中,即存在于缓存之中.

当Session 通过get()方法试图从数据库中得到一个对象时, Session会先判断这个对象是否已经存在与缓存中, 如果存在这从缓存中获得, 从而避免访问数据库, 提高了性能.

Session 缓存的作用 

(1) 减少访问数据库的频率.

(2) 当缓存中的持久化对象之间存在循坏关联关系时,Session会保证不出现访问对象图的死循环, 以及由死循环引起的JVM堆栈溢出异常.

(3) 保证数据库中的相关记录和缓存中相应的对象保持同步.
Note: Session 在清理缓存的时候,会自动进行脏检查, 如果发现Session缓存中的对象和数据库的不一致,则会根据对象的最新属性去同步更新数据库.

 

脏检查及清理缓存的机制

当一个对象被加入到Session的缓存中的时候,Session 会为这个对象复制一份快照, 当session 清理缓存的时候, 将用最新的对象和快照进行对比来判断对象是否经过了更新, 然后根据脏对象的最新属性生成相关SQL语句 更新数据库.

 

Session 清除缓存的默认时间点

 

(1) 当程序调用hibernate Transaction的commit()方法的时候, commit方法先清理缓存(调用Session的 flush()方法), 然后再向数据库提交事务.

 

(2) 当程序执行一些查询操作的时候, 如果缓存中的持久化对象属性以及发生了变化, 就会先清理缓存, 使得缓存与数据库进行同步.

 

(3) 当程序显示的调用Session的 flush方法的时候.

 

 

如果不希望Session 在以上默认的时间点进行缓存的清理, 也可以通过Session 的 setFlushMode()方法来显示的设定删除的时间点.

FlushMode 类定义了3种不同的清理模式: FlushMode.AUTO, FlushMode.COMMIT和FlushMode.NEVER.

 

清理缓存的模式

各种查询方法

Transaction的commit()方法

Session的flush()方法

FlushMode.AUTO(默认)

清理

清理

清理

FlushMode.COMMIT

不清理

清理

清理

FlushMode.NEVER

不清理

不清理

清理

 

 

 

 

 

 

 

 Flush()方法适用场合

(1) 插入,删除或更新某个持久化对象会引发数据库的触发器.

 

(2) 在应用程序中混合使用hibernaye API和JDBC API.

 

(3) JDBC驱动程序不健壮, 自动清理模式中无法正常清理.

 

 


https://www.xamrdz.com/lan/5u91921829.html

相关文章: