首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

hibernate缓存_事宜隔离级别理解

2012-09-13 
hibernate缓存_事务隔离级别理解1.hibernate缓存分一级缓存.二级缓存.?? 一级缓存: session级别的缓存.???

hibernate缓存_事务隔离级别理解

1.hibernate缓存分一级缓存.二级缓存.

?

? 一级缓存: session级别的缓存.???

?二级缓存:sessionFactory级别的缓存.??? 在进程范围或者是集群范围

?

缓存范围:

??a: 事务范围内的缓存.像一级缓存属于事务范围之内的缓存.缓存随着事务的结束而消失.

??b:进程范围内的缓存.缓存被进程内的所有事务共享.这些事务有可能并发访问同一个缓存.因此必须对缓存采用必要的事务隔离级别.这里的缓存的存储介质可以内存或者是硬盘.

? c:集群范围内的缓存.在集群环境中.缓存被一个机器或者多个机器的进程所共享.缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证数据的一致性.

?

?

一级缓存:

? A:当调用SESSION的SAVE.UPDATE,SAVEORUPDATE方法时,如果缓存中不存在相应的对象,那么就把该对象加入到一级缓存中去.

?B.当调用SESSION的LOAD,GET以及QUERY查询接口的LIST,ITERATOR方法时,如果缓存中存在相应的对象,就不需要从数据库中检索.当调用SESSION的CLOSE方法时,缓存被清空.

?

SESSION接口的方法:

?A:SAVE和PERSIST.

?? SAVE方法会立即执行INSERT语句,而PERSIST方法可能不会立即执行,

B:GET和LOAD.

? 它会先判断对象是否存在,如果存在就不到数据库中去查询,当数据库不存在与OID相对应的记录时,LOAD方法会抛出异常,而GET方法会返回NULL.GET方法立即执行SELECT语句.

?

?

清理缓存:

?

? 是指SESSION按照缓存中对象的属性变化来同步更新数据库.?? 也就是说SESSION在清理缓存时,会自动进行脏检查,如果发现SESSION缓存中的对象与数据库中相应的记录不一致时,就会同步数据库.

?

何时清理缓存呢?

? 1.当调用事务的COMMIT方法的时候,会先清理缓存,然后再提交事务.

? 2.当调用SESSION的FLUSH的时候,

? 3.当应用程序执行一些查询操作时,如果缓存中的对象的属性发生了变化,那么就会先清理缓存.使得缓存与数据库中的数据保持同步,保证查询的结果返回的正确数据.

?

当二级缓存进程范围内的多个事务并发访问数据库相同的数据时,可能会出现五类并发访问的问题,因此必须采用必要的事务隔离级别.同样两个并发的事务访问缓存的相同的数据的时候,也有可能出现并发的问题.因此也要为HIBERNATE的二级缓存设定适当的并发访问策略.每一种策略对应一种事务隔离级别.

?

?

二级缓存的策略是针对ID查询的策略.和对象的ID密切相关,对么对于条件查询就不怎么适用了.对于这种情况的存在,HIBERNATE采用了"查询缓存",在一定程度上缓解这个问题.

?

启动用查询缓存之后,第一次执行查询时,HIBERNATE会把查询结果放入到查询缓存中,以后再次执行该查询语句时,只需从缓存中获得查询结果,从而提高查询性能.???? 查询缓存依赖二级缓存.

?

查询缓存只会存放实体的ID

热点排行