hibernate性能优化

1.注意session.clear()的运用,尤其在不断分页循环的时候

a、在一个大集合中进行遍历,遍历msg,取出其中的含有敏感字样的对象

b、另外一种形式的内存泄漏

2.1+N问题

a、Lazy

b、BatchSize

c、join fetch

3.list 和 iterate不同之处

a、list取所有

b、iterate先取ID,等用到的时候再根据ID取对象

c、session中list第二次发出,仍会到数据库查询

d、iterate第二次,首先找session缓存

4、一级缓存和二级缓存和查询缓存

a、什么是缓存

b、什么是一级缓存、session级别的缓存

c、什么是二级缓存、SessionFactory级别的缓存,可以跨越session存在

i、经常被访问

ii、改动不大不会经常改动

iii、数量有限

d、打开二级缓存

i、hibernate.cfg.xml设定:

<property  name="cache.use_second_level_cache">true</property>

<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

ii、@cache注解

e、load默认使用二级缓存,iterate默认使用二级缓存

f、list默认往二级缓存加数据,但是查询时候不使用

g、如果要query用二级缓存,需打开查询缓存

i、<property name="cache.use_query_cache">true</property>

ii、调用Query的setCachable(true)方法指明使用二级缓存

h、缓存算法

i、LRU、LFU、FIFO

5、事务并发处理

a、事务:ACID

i、Atomic     Consistency    Itegrity    Durability

b、事务并发时可能出现的问题

i、第一类丢失更新(Lost Update)

ii、dirty read脏读

iii、non-repeatable read不可重复读

iiii、phantom read幻读

c、数据库的事务隔离机制

i、查看java.sql.Connection文档

ii、1:read-uncommitted 2:read-committed 4:repeatable read 8:serializable

a) 0001 0010 0100 1000

2:只要数据支持事务,就不可能出现第一类丢失更新

3:read-uncommitted会出现dirty read,phantom-read,non-repeatable read问题

4:read-commited不会出现dirty read,因为只有两一个事务提交才会读出来结果,但仍然会出现non-reapeatable read和phantom-read

5:repeatable

6:serializable解决一切问题

d、设定hibernate的事务隔离级别

i、hibernate.connection.issolation = 2

ii、用悲观锁/乐观锁解决repeatable read问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值