二级缓存技术

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出来的数据对象.不能缓存一个结果集.查询缓存可以缓存查询语句和结果集, 当重复执, 同一个查询语句时,只取数据库查询一次,后续都是将缓存中的结果集取出。适用于频繁的执行同一个查询语句,而且查询结果集很少发生变化的情况。