一、什么是缓存?

缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略。

 

 

二、为什么使用缓存?

ORM框架访问数据库的效率直接影响应用程序的运行速度,提升和优化ORM框架的执行效率至关重要。
Hibernate的缓存是提升和优化Hibernate执行效率的重要手段,所以学会Hibernate缓存的使用和配置是优化的关键。

 

 

三、缓存的演示,不同Session没有使用到缓存。

 

 

四、Hibernate一级缓存

1、Hibernate一级缓存又成为Session缓存,会话级缓存。
2、通过Session从数据库查询实体时会把实体在内存中存储起来,下一次查询同一实体时不再从数据库获取,而从内存中获取,这即使缓存。
3、一级缓存的生命周期是和Session相同,Session销毁,缓存也销魂。
4、一级缓存的的数据只在当前会话内有效。

 

 

五、一级缓存的API

一级缓存无法取消,用两个方法管理。
evict():用于将某个对象从Session的一级缓存中清除。
clear():用于将一级缓存中的所有对象全部清除

 

使用Query的list()方法,第二次查询内容还是会从数据库再次查询数据。所以Query.list()方法不会使用缓存。
使用Query的iterate()方法,会从缓存中先检索是否有数据,如果没有,再进行数据库的查询。

 

list和iterate的区别:
List的获取方式为:List<Customers> list = query.list();
Iterator的获取方式:Iterator<Customers> it = query.iterate();
(1)因为他们获取数据的方式不一样,list()会直接查询数据库,iterator()会先到数据库中把id都取出来,然后真正要遍历某个对象的时候先到缓存中找,如果找不到,以id为条件再发一条sql到数据库,这样如果缓存中没有数据,则查询数据库的次数为n+1次
(2)list只查询一级缓存,而iterator会从二级缓存中查
(3)list方法返回的对象都是实体对象,而iterator返回的是代理对象

 

 

六、二级缓存

有些常用的数据,在一个session中缓存以后,我们希望它在其他的session中也能够使用,而不用再次缓存怎么办呢?
这种情况下,我们就要使用更高级别的二级缓存,每个session公用的缓存。

 

 

七、二级缓存的使用步骤:

1、添加二级缓存对应的jar包。
2、在Hibernate配置文件中添加Provider类的描述。
3、添加二级缓存的属性配置文件。
4、在需要被缓存的表所对应的映射文件中添加<cache />标签。
具体实现:
1、导入缓存依赖的jar包,ehcache.jar,commons-loggin.1.xxx.jar
2、添加缓存的配置文件ehcache.xml配置文件到src目录。
3、在hibernate.cfg.xml中添加配置信息。指定二级缓存的外部实现类。
<property name="cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
4、在对应的hbm.xml文件中添加
<cache usage="read-only" />
cache标签的介绍:
usage:缓存模式:
read-only:表示只读事务模式。
transactional:
read-write:
nonstrict-read-write:
include:是否缓存延迟加载的属性
all表示缓存所有属性。
non-lazy:不缓存延迟加载的属性。
region:设置了名称后可以在缓存配置文件ehcache.xml中对这个缓存进行单独配置。
ehcache.xml
<defaultCache
maxElementsInMemory="10000"         //表示缓存允许创建的最大对象数。
eternal="false"                     //表示缓存是否永久有效
timeToldleSeconds="120"             //表示缓存的过期前的空闲时间,120秒
timeToLiveSeconds="1200"            //表示缓存的超时时间 1200秒
overflowToDisk="true" />            //表示缓存溢出后是否保存在硬盘上。

八、二级二级缓存的总结:

1、二级缓存又称为”全局缓存“,应用级缓存
2、二级缓存中的数据可使用范围是当前所有会话。
3、二级缓存是可插拔式缓存,默认是EHCache,还支持其他二级缓存组件:如Hashtable,OSCache,SwarmCache,JBoss TreeCache等。
二级缓存的适用场合。
1、很少被修改的数据。
2、不是很重要的数据,允许出现偶尔并发的数据。
3、不会被并发访问的数据。
4、参考数据。

九、一级缓存和二级缓存的对比 

posted on 2016-05-05 01:01  Builder  阅读(337)  评论(0编辑  收藏  举报