二级缓存技术
SessionFactory级别的缓存,受SessionFactory管理,可以被不同
Session访问和操作。默认是关闭。一般在使用时需要利用
SessionFactory.evict()等方法显式的管理该缓存。
二级缓存和一级缓存的区别:
Hibernate提供了二级缓存机制。
首先,Hibernate中的一级缓存机制(也叫做事务内的缓存)是与Session绑定在一起的。当一个Session开启,一级缓存创 建;当一个 Session关闭,一级缓存销毁。若使用一级缓存机制(Session的缓存,每个用户线程对应一块Session缓存)现在有5个用户(5 个线程)访问Hibernate,那么Hibernate会为5个用户创建5个不同的Session(一个线程分配一个Session)。
假设用户1调用getId("1")方法查找id=1的Emp对象,Session会首先查找内部有没有id=1的Emp对象,如果有,则返回给用户;没有则去数据库中查找,并保存到该Session中,当用户第二次访问时,就不用去数据库中取数据了。
一级缓存提高了效率,减少了访问数据库的压力。如果5个用户都调用getId("1")方法查找id=1的Emp对象,那么在这5个session中就分别保存着5个id=1的Emp对象,这样显然重复。
由此,我们引入了二级缓存机制(SessionFactory中的缓存,同一个项目中只有一份,所有用户共用)当用户1第一次调用getId("1")方法时,会到数据库中查找出Emp对象,保存到一级缓存中的同时,也在二级缓存中保存一份。这样,当其他用户也需要id=1的Emp对象时,只需要到二级缓存中查找即可,就不用连接到数据库了。
一级缓存是用户线程专用的,二级缓存是大家共用的。
我们通过配置一些现成的缓存组件(如ehcache)来实现,同时我们还可以控制哪些对象需要放入二级缓存,哪些对象不需要做二级缓存。
a.什么情况可以考虑使用二级缓存
--该对象被多个不同用户频繁使用
--该对象更新操作不频繁
hibernate缓存机制总结:
Hibernate中的一级缓存机制(也叫做事务内的缓存)是与Session绑定在一起的。
当一个Session开启,一级缓存创建;当一个Session关闭,一级缓存销毁。
Hibernate中的二级缓存特点如下:
a.二级缓存被称为SessionFactory级别缓存. 生命周期与SessionFactory对象相关
b. 二级缓存空间可以被不同的Session对象访问 共享.
c. 二级缓存默认是关闭状态.如果遇到某个数据对象被多个不同的Session频繁访 问,可以开启.
Hibernate中的查询缓存:
前面的一级和二级缓存, 缓存的时load,get出来的数据对象.不能缓存一个结果集.查询缓存可以缓存查询语句和结果集, 当重复执, 同一个查询语句时,只取数据库查询一次,后续都是将缓存中的结果集取出。适用于频繁的执行同一个查询语句,而且查询结果集很少发生变化的情况。