一、hibernate缓存的作用
为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。
二、hibernate的分类
hibernate缓存有一级缓存和二级缓存之分,一级缓存又成为Session缓存,二级缓存又称为SessionFactory缓存。
1.一级缓存
Session缓存属于内置的,不可被卸载,由于session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围。在第一级缓存中,持久化类的每个实例都具有唯一的OID。
2二级缓存
SessionFactory缓存是可选的插件,默认情况不会启用,由于SessionFactory对象的生命周期和应用的整个
生命周期对应,因此SessionFactory是进程范围或集群范围的缓存,并有可能出现并发问题,所以需要采用
适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。
2.1 适用场景:很少被修改的数据
不是很重要的数据,允许出现偶尔并发的数据
不会被并发访问的数据
常量数据
与其他应用共享的数据不要放在该级别缓存中。
2.2 二级缓存的配置
由于hibernate没有提供二级缓存的组件,所以需要加入额外的二级缓存包,常用的二级缓存包是EHcache,这个
可以从hibernate的lib->optional->ehcache中找到,然后将里面的jar包导入即可。
2.21在hibernate.cfg.xml中加入以下信息:(这里是以5.4.0版本为例)
<!-- 开启二级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 二级缓存的提供类 在hibernate4.0版本以后我们都是配置这个属性来指定二级缓存的提供类-->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.internal.EhcacheRegionFactory</property>
<!-- 二级缓存配置文件的位置 -->
<property name="