`
jgsj
  • 浏览: 960630 次
文章分类
社区版块
存档分类
最新评论

详解Hibernate缓存机制

 
阅读更多

此篇讲解HIbernate的缓存原理以及一级、二级缓存的比较和何时使用,如有不对,请留言指出不对共勉之。

mailto: hezj@china.kjlink.com 凯捷国际

缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能.
Hibernate在查询数据时,首先到缓存中去查找,如果找到就直接使用,找不到的时候就会从物理数据源中检索,所以,把频繁使用的数据加载到缓存区后,就可以大大减少应用程序对物理数据源的访问,使得程序的运行性能明显的提升.


Hibernate缓存分类:

Session缓存,一级缓存.

SessionFactory的缓存分为内置缓存和外置缓存.内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定义SQL语句等),对于应用程序来说,它是只读的.外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备.

Hibernate的缓存范围

Hibernate的一级缓存和二级缓存都位于均位于持久层,且均用于存放数据库数据的副本,最大的区别就是缓存的范围各不一样.

缓存的范围分为3类:

1.事务范围
事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结束.事务范围的缓存使用内存作为存储介质,一级缓存就属于事务范围.
2.应用范围
应用程序的缓存可以被应用范围内的所有事务共享访问.缓存的生命周期依赖于应用的生命周期,只有当应用结束时,缓存的生命周期才会结束.应用范围的缓存可以使用内存或硬盘作为存储介质,二级缓存就属于应用范围.
3.集群范围
在集群环境中,缓存被一个机器或多个机器的进程共享,缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致,缓存中的数据通常采用对象的松散数据形式.

Hibernate的缓存管理

一级缓存的管理:

evit(Object obj) 将指定的持久化对象从一级缓存中清除,释放对象所占用的内存资源,指定对象从持久化状态变为脱管状态,从而成为游离对象.
clear() 将一级缓存中的所有持久化对象清除,释放其占用的内存资源
contains(Object obj) 判断指定的对象是否存在于一级缓存中.
flush() 刷新一级缓存区的内容,使之与数据库数据保持同步.

二级缓存的管理:

evict(Class arg0, Serializable arg1) 将某个类的指定ID的持久化对象从二级缓存中清除,释放对象所占用的资源.

Java代码
  1. sessionFactory.evict(Customer.class,newInteger(1));

evict(Class arg0) 将指定类的所有持久化对象从二级缓存中清除,释放其占用的内存资源.
Java代码
  1. sessionFactory.evict(Customer.class);

evictCollection(String arg0) 将指定类的所有持久化对象的指定集合从二级缓存中清除,释放其占用的内存资源.
Java代码
  1. sessionFactory.evictCollection("Customer.orders");


Hibernate的二级缓存的配置

首先,不是所有的数据都适合放在二级缓存中,看一下,什么样的数据适合放在二级缓存中来?什么样的数据不适合放在二级缓存中来?
下面这几种情况就不适合加载到二级缓存中:
1.经常被修改的数据
2.绝对不允许出现并发访问的数据
3.与其他应用共享的数据
下面这己种情况合适加载到二级缓存中:
1.数据更新频率低
2.允许偶尔出现并发问题的非重要数据
3.不会被并发访问的数据
4.常量数据
5.不会被第三方修改的数据

Hibernate的二级缓存功能是靠配置二级缓存插件来实现的,Hibernate为了集成这些插件,Hibernate提供了org.hibernate.cache.CacheProvider借口,它充当缓存插件与Hibernate之间的适配器 .

常用的二级缓存插件
EHCache org.hibernate.cache.EhCacheProvider
OSCache org.hibernate.cache.OSCacheProvider
SwarmCahe org.hibernate.cache.SwarmCacheProvider
JBossCache org.hibernate.cache.TreeCacheProvider

简单介绍一下EHCache的配置
hibernate.cfg.xml
Xml代码
  1. <hibernate-configuration>
  2. <session-factory>
  3. <!--设置二级缓存插件EHCache的Provider类-->
  4. <propertyname="hibernate.cache.provider_class">
  5. org.hibernate.cache.EhCacheProvider
  6. </property>
  7. <!--启动"查询缓存"-->
  8. <propertyname="hibernate.cache.use_query_cache">
  9. true
  10. </property>
  11. </session-factory>
  12. </hibernate-configuration>


ehcache.xml

Xml代码
  1. <ehcache>
  2. <!--maxElementsInMemory为缓存对象的最大数目,eternal设置是否永远不过期,timeToIdleSeconds对象处于空闲状态的最多秒数,timeToLiveSeconds对象处于缓存状态的最多秒数-->
  3. <diskStorepath="java.io.tmpdir"/>
  4. <defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="300"timeToLiveSeconds="600"overflowToDisk="true"/>
  5. </ehcache>


****.hbm.xml

Xml代码
  1. <?xmlversion="1.0"encoding='UTF-8'?>
  2. <!DOCTYPEhibernate-mappingPUBLIC
  3. "-//Hibernate/HibernateMappingDTD3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping>
  6. <class>
  7. <!--设置该持久化类的二级缓存并发访问策略read-onlyread-writenonstrict-read-writetransactional-->
  8. <cacheusage="read-write"/>
  9. </class>
  10. </hibernate-mapping>
分享到:
评论

相关推荐

    Hibernate缓存深入详解

    Hibernate缓存深入详解,详细介绍Hibernate缓存机制。 1.Hibernate缓存概述 2.Hibernate一级缓存(Session缓存) 3.Hibernate二级缓存 4.查询缓存 5.二级缓存的高级应用(分布式缓存)

    详解Hibernate的缓存机制及其配置代码

    Hibernate在查询数据时,首先到缓存中去查找,如果找到就直接使用,找不到的时候就会从物理数据源中检索,所以,把频繁使用的数据加载到缓存区后,就可以大大减少应用程序对物理数据源的访问,使得程序的运行性能...

    Hibernate框架 jar 架包 开发详解

    Hibernate 简介 Hibernate 开发流程 Hibernate 配置文件 Hibernate 核心接口和类 Hibernate ORM映射 HQL Hibernate 懒加载机制与抓取策略 Hibernate 缓存 Hibernate 锁机制

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     8.2.2 脏检查及清理缓存的机制  8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  ...

    SSH框架详解

    Hibernate工作原理、Hibernate的核心组件、Persistent Object、Hibernate的运行过程、Hibernate缓存的作用、Hibernate缓存分类、Hibernate优点、 Hibernate缺点、spring原理 、AOP(Aspect-Oriented Programming): ...

    Hibernate详解

    该文档详细讲解了Hibernate的几个核心技术:Hibernate的配置文件、缓存机制、查询策略、事务管理、HQL和QBC、一对多、一对一、多对多映射关系、继承映射等,并且还有配有实例。

    Hibernate框架中的缓存技术详解

    主要介绍了Hibernate框架中的缓存技术,结合实例形式详细分析了Hibernate框架缓存机制的原理与具体使用技巧,需要的朋友可以参考下

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     8.2.2 脏检查及清理缓存的机制  8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     8.2.2 脏检查及清理缓存的机制  8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     8.2.2 脏检查及清理缓存的机制  8.3 Java对象在Hibernate持久化层的状态  8.3.1 临时对象的特征  8.3.2 持久化对象的特征  8.3.3 被删除对象的特征  8.3.4 游离对象的特征  8.4 Session接口的详细用法  ...

    hibernate 框架详解

    Hibernate的统计(statistics)机制 4.5. 日志 4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的...

    低清版 大型门户网站是这样炼成的.pdf

    5.8 hibernate的缓存机制 332 5.8.1 hibernate的缓存分类 332 5.8.2 hibernate的缓存范围 332 5.8.3 hibernate的缓存管理 333 5.8.4 hibernate二级缓存的并发访问策略 333 5.8.5 hibernate的二级缓存配置 334 ...

    mybatis入门到精通详解

    视频包含:mybatis入门;...MyBatis配置文件编写,MyBatis动态SQL,MyBatis缓存机制,MyBatis-Spring整合,MyBatis逆向工程,MyBatis高级映射等等,适合入门级java学员(由于文件过大,此处放网盘下载链接)

    从零开始学Spring Boot

    1.40 Spring Boot集成EHCache实现缓存机制 1.41 Spring Boot分布式Session状态保存Redis 1.42 Spring Boot Shiro权限管理 1.43 Spring Boot Shiro权限管理 1.44 Spring Boot Shiro权限管理 1.45 Spring Boot Shiro...

    Java Web程序设计教程

    10.2hibernate缓存 213 10.2.1缓存的工作原理 213 10.2.2应用一级缓存 214 10.2.3应用二级缓存 214 10.2.4应用第三方缓存 216 10.3项目实战——借还图书 217 本章小结 224 课后练习 224 第11章spring框架...

    Spring.3.x企业应用开发实战(完整版).part2

    17.4.5 使用Hibernate二级缓存 17.5 对持久层进行测试 17.5.1 配置Unitils测试环境 17.5.2 准备测试数据库及测试数据 17.5.3 编写DAO测试基类 17.5.4 编写BoardDao测试用例 17.6 服务层开发 17.6.1 UserService的...

    Spring3.x企业应用开发实战(完整版) part1

    17.4.5 使用Hibernate二级缓存 17.5 对持久层进行测试 17.5.1 配置Unitils测试环境 17.5.2 准备测试数据库及测试数据 17.5.3 编写DAO测试基类 17.5.4 编写BoardDao测试用例 17.6 服务层开发 17.6.1 UserService的...

Global site tag (gtag.js) - Google Analytics