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"/>
注:二级缓存缓存的是对象,它是把所有的对象缓存到内存中,一定注意是基于对象的缓存。
分享到:
相关推荐
2.3.1. Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。 2) 把获得的所有数据...
Hibernate缓存深入详解,详细介绍Hibernate缓存机制。 1.Hibernate缓存概述 2.Hibernate一级缓存(Session缓存) 3.Hibernate二级缓存 4.查询缓存 5.二级缓存的高级应用(分布式缓存)
配置 EhCache 的实例 1、 简介: EhCache缓存插件是Hibernate的另一个项目,Hibernate框架内置了对它 的支持,对于单机应用推荐使用它做为Hibernate的二级缓存。
Hibernate缓存讲解PPT 1.Hibernate缓存概述 2.Hibernate一级缓存(Session缓存) 3.Hibernate二级缓存 4.查询缓存 5.二级缓存的高级应用(分布式缓存)
Hibernate是一个持久化框架,经常需要访问数据库。如果我们能够降低应用程序对物理数据库访问的频次,那会提供应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序运行时先从缓存中读写数据。
二级缓存伴随着整个应用,也是就是伴随着SessionFactory消亡而消亡. Hibernate的缓存机构图如下: 三 Hibernate中的第二级缓存 Hibernate的第二级缓存是SessionFactory级别的缓存,它被所有的...
hibernate 缓存 详解 一级缓存 二级缓存 应用
2、应用范围(单SessionFactory即二级缓存) 应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于应用的生命周期,只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存可以使用内存或硬盘...
NULL 博文链接:https://lee79.iteye.com/blog/320099
一、why(为什么要用Hibernate缓存?...)Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存。 1.Hibernate一级缓存又称为“Session的缓存”。 Session内置不能被卸载,Session的缓存是事
有很多人认为Hibernate天生效率比较低,确实,在...特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略: 1.抓取优化 2.二级缓存 3.批量数据操作 4.杂项
该项目主要关注hazelcast 与hibernate 结合提供的分布式缓存能力。 其他强大的功能,如内存计算等(目前)没有涵盖。 快速开始 要启动应用程序,只需克隆 repo 并一个接一个地执行以下命令。 整个应用程序是使用 ...
22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级缓存的交互模式 22.5 运行本章的范例程序 22.6 小结 22.7 思考题 第23章 管理Session和实现对话 23.1 管理Session对象的生命周期 23.1.1 ...
4、Hibernate集成二级缓存框架Ehcache。 5、数据库是MySQL、Oracle和SQL Server,Hibernate的Dialect可使程序移植到其他数据库。 6、采用开源的互动地图Javascript库Leaflet,处理自定义在线地图。 7、采用Google ...
早在2008年开始,我们就借鉴了Java强大的ORM 框架Hibernate的二级对象缓存编写了这个Rails的AR对象缓存插件,并且一直作为JavaEye网站缓存优化的秘密武器来使用,取得了非常理 想的效果。 现在我们将这个插件从...
3.4.4. 二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 ...
//该方法会延迟加载/获取数据(只有使用该对象中的字段时才会向数据库发出查询语句),该方法会在内部和二级缓存中查找数据,当数据库中没有要查询的数据时报ObjectNotFoundException异常 (7).createQuery(String HQL)...
22.4.3 在应用程序中管理第二级缓存 22.4.4 Session与第二级缓存的交互模式 22.5 运行本章的范例程序 22.6 小结 22.7 思考题 第23章 管理Session和实现对话 23.1 管理Session对象的生命周期 23.1.1 ...