欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate二级缓存的应用

程序员文章站 2022-05-10 11:39:35
...
Hibernate二级缓存的应用及其最佳实践
Hibernate从其诞生以来,其性能及效率一直为世人所诟病。正因为如此,有大部分人一直认为Hibernate不适合开发大项目。今天就让我们一步一步为Hibernate正名。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得程序员可以随心所欲的使用对象编程思维来操纵数据库。最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
1. 首先,我们了解下Hibernate的缓存机制。
Hibernate缓存机制对Hibernate的性能发挥一直处于一个极其重要的作用,它是持久层性能提升的关键。





图1-1
Hibernate缓存介于Hibernate应用和数据库之间,缓存中存放了数据库数据的拷贝。 其作用是减少访问数据库的频率,从而提高应用的运行性能。由图1-1可以看出,如果查询缓存命中率高,则性能也会相应的提升。
2. Hibernate缓存分类
2.1  一级缓存: Session级别的缓存 (不讲)
2.2  二级缓存: SessionFactory级别的全局缓存 (重点讲)。Hibernate并没有提供相应的二级缓存的组件,所以需要加入额外的二级缓存包,常用二级缓存包是ECHcache。
3. 操作步骤:
3.1在Hibernate.cfg.xml中配置开启二级缓存
<property name="hibernate.cache.use_second_level_cache">
true
</property>
3.2设置二级缓存所提供的类
<property name="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.EhCacheProvider
</property>
3.3 在hibernate4.0之后需要设置Facotory_class,目的提生效率
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory
</property>
3.4设置相应的ehcache.xml文件,在这个文件中配置二级缓存的参数
3.4.1默认缓存
<defaultCache
        maxElementsInMemory="10000"//在内存中有1万个对象
        eternal="false"//是否永远不在内存中消失
        timeToIdleSeconds="120"//每个对象的最大空闲时间(单位:秒)
        timeToLiveSeconds="120"//每个对象的最大活时间(单位:秒)
        overflowToDisk="true"//当超过1万的,放到硬盘上面
        />
3.4.2 每一个独立的cache可以单独为不同的对象进行设置
    <cache name="simple"
        maxElementsInMemory="10000"
       eternal="false"
       timeToIdleSeconds="300"
        timeToLiveSeconds="600"
       overflowToDisk="true"
        />
4. 说明配置文件的位置
<property name="hibernate.cache.provider_configuration_file_resource_path">
ehcache.xml
</property>
5. 开启二级缓存
在xml的配置中设置
<class name="Department" table="SysDepartment">
    <cache usage="read-only"/>
注:二级缓存缓存的是对象,它是把所有的对象缓存到内存中,一定注意是基于对象的缓存。