hibernate性能优化注意点及二级缓存的并发访问策略
1、注意session.clear()的运用,尤其在不断分页循环的时候
a)  另外一种形式的内存泄露  ( Java有内存泄漏吗?语法上没有,但是可由java引起,例如:连接池不关闭,或io读取后不关闭)
2、1+N问题
a) @ManyToOne(fetch=FetchType.LAZY)
       fetch=FetchType.LAZY 解决N+1问题 说明如下:
        当多对一(@ManyToOne)已经设定属性" fetch=FetchType.LAZY "时
       只有当需要时才会去获取关联表中数据 可以解决N+1问题
b)@BatchSize
       //@BatchSize 解决N+1问题 说明如下:
       //在与查询表关联的表类头处加@BatchSize(size=5)
       //表示每次可查出5条记录 从而减少了select语句的个数
c) join fetch
       //join fetch 解决N+1问题 说明如下:
       //修改hql语句为--"  from xxx  left join fetch xxx "
d)QBC
       //QBC(Query By Criteria) 解决N+1问题 说明如下:
       //使用QBC的 createCriteria(*.class)执行查询 也可避免N+1问题
3 、list和iterate不同之处
a) list取所有
b)iterate先取 ID,等用到的时候再根据ID来取对象
c) session中list第二次发出,仍会到数据库査询
d)iterate 第二次,首先找session 级缓存Hibernate二级缓存的并发访问策略有四种:
只读(read-only)、非严格读写(nonstrict-read-write)、读写(read-write)和事务(transactional)。 但是目前还没有二级缓存提供者完全支持所有的并发访问策略。 只读(read-only): 对于永远不会被修改的数据可以采用这种并发访问策略,它的并发性能是最高的。但必须保证数据不会被修改,否则就会出错。 非严格读写(nonstrict-read-write): 非严格读写不能保证缓存与数据库中数据的一致性,如果存在两个事务并发地访问缓存数据的可能,则应该为该数据配置一个很短的过期时间,以减少读脏数据的可能。对于极少被修改,并且可以容忍偶尔脏读的数据可以采用这种并发策略。 读写(read-write): 读写策略提供了“read committed"数据库隔离级别。对于经常被读但很少修改的数据可以采用这种策略,它可以防止读脏数据。 事务(transactional): 它提供了Repeatable Read事务隔离级别。它可以防止脏读和不可重复读这类的并发问题。
相关推荐
  微微撒    2020-04-18  
   gwn00    2020-01-14  
   无情的你无情的雨    2020-07-18  
   dongxurr    2020-07-26  
   jimgreatly    2020-06-03  
   cnflat0    2020-04-25  
   技术驱动人生    2020-04-08  
   Justagreenonion    2020-03-27  
   zhiyuan0    2020-02-24  
   云之飞踢    2020-01-28  
   明月清风精进不止    2020-01-07  
   Justagreenonion    2020-01-05  
   manbucy    2014-05-20  
   javamagicsun    2019-12-17  
   栖梧桐    2019-12-13  
   javamagicsun    2019-12-04  
   GechangLiu    2016-11-23  
   flydoging    2019-11-05  
   Ashes    2019-11-05  
 