1、Hibernate缓存策略概述数据库
什么是缓存?缓存
缓存是指为了下降应用程序对物理数据源访问的频次,从而提升应用程序的运行性能的一种策略服务器
为何使用缓存?session
ORM框架访问数据库的效率直接影响应用程序的运行速度,提高和优化ORM框架的执行效率相当重要并发
Hibernate的缓存是提高和优化Hibernate执行效率的重要手段,因此学会Hibernate缓存的使用和配置是优化的关键框架
2、Hibernate缓存策略——不使用缓存的问题ide
观察如图代码IO,发现了什么?性能
1.Hibernate缓存与session相关,同一个session第二次访问同一个对象将使用缓存。优化
2.在不一样的session中屡次查询同一个对象时,会执行屡次数据库查询。spa
3.在一级缓存当中,持久化类的每一个实例都具备惟一的OID,也就是说同一个session两次查一个对象时,第二次是不会再将对象保存在缓存当中的。
3、一级缓存介绍
介绍Hibernate一级缓存:
1.Hibernate一级缓存又称为"Session缓存","会话级缓存"
2.经过Session从数据库查询实体时把实体在内存中存储起来,下一次查询同一实体时再也不从数据库获取,而是从内存中获取,这就是缓存
3.一级缓存的生命周期和Session相同;Session销毁,他也销毁
4.一级缓存中的数据可适用范围在当前会话以内
Hibernate一级缓存的API
1.一级缓存没法取消,Hibernate默认使用一级缓存
2.用两个方法管理一级缓存:
a.evict():用于将某个对象从Session的一级缓存中清除
b.clear():用于将一级缓存中的全部对象所有清除
3.一级缓存也有些时候会对程序的性能产生影响,由于在对数据库进行增删改的时候同时也要更新缓存
一级缓存注意问题:
1.query.list()是不会使用一级缓存的
2.query.iterate()会使用一级缓存,当缓存中有数据的时候,query.iterate()将全部对象的id查询出来而后到缓存中将全部对象都查询出来,若是缓存中没有数据,query.iterate()则把对象从数据库中一条一条的将数据查出来
4、二级缓存应用
二级缓存的配置步骤:
一、添加二级缓存对应的jar包(commons-logging-1.1.3.jar ; ehcache.jar.zip)
二、在Hibernate的配置文件中添加Provider类的描述
三、添加二级缓存的属性配置文件(ehcache.xml)
四、在须要被缓存的表所对应的映射文件中添加<cache/>标签
region="Employee(自定义命名)":
在ehcache.xml文件中自定义配置:
maxElementsInMemory="10000" 表示缓存中容许建立的最大对象数。
eternal="false" 表示缓存中对象是否为永久的。
timeToIdleSeconds="120" 表示缓存数据钝化时间(即对象在它过时前的空闲时间)。
timeToLiveSeconds="120" 表示缓存数据生存时间(即对象在它过时前的生存时间)。
overflowToDisk="true" 表示溢出以后是否存储在硬盘上。
Hibernate4之后的配置:
<!-- 配置二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
5、一二级缓存对比及总结
二级缓存的介绍
二级缓存又称为“全局缓存”、“应用级缓存”
二级缓存中的数据可适用范围是当前应用中的全部会话
二级缓存是可插拔式缓存,默认是EHCache,还支持其余二级缓存组件如:Hashtable、OSCache、SwarmCache、JBoss TreeCache等
一般会将一下特征的数据放入到二级缓存中
不多被修改的数据
不是很重要的数据,容许偶尔并发的数据
不会被并发访问的数据
参考数据
总结:
一、Hibernate的缓存能提升检索效率
二、Hibernate的缓存分为一级缓存和二级缓存。一级缓存是会话级缓存,二级缓存是应用级缓存
三、Hibernate的缓存在提升检索的同时,也会增长服务器的消耗,因此要注意缓存的使用策略