Hibernate 的缓存机制
一、缓存的范围分为 3 类:
1、事务范围(单 Session 即一级缓存)
事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通
常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务
结束时,缓存的生命周期才会结束.事务范围的缓存使用内存作为存储介质,一级
缓存就属于事务范围.
2、应用范围(单 SessionFactory 即二级缓存)
应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于
应用的生命周期,只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存
可以使用内存或硬盘作为存储介质,二级缓存就属于应用范围.
3、集群范围(多 SessionFactory)
在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集
群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存
中的数据通常采用对象的松散数据形式.
二、一级缓存:
1、使用一级缓存的目的是为了减少对数据库的访问次数,从而提升 hibernate
的执行效率;(当执行一次查询操作的时候,执行第二次查询操作,先检查缓
存中是否有数据,如果有数据就不查询数据库,直接从缓存中获取数据);
2、Hibernate 中的一级缓存,也叫做 session 的缓存,它可以在 session 范围
内减少数据库的访问次数,只在 session 范围内有效,session 关闭,一级缓存
失败;
3、一级缓存的特点,只在 session 范围有效,作用时间短,效果不是特别明显,
在短时间内多次操作数据库,效果比较明显。
4、当调用 session 的 save/saveOrUpdate/get/load/list/iterator 方法的时候,都
会把对象放入 session 缓存中;