`
looyo
  • 浏览: 58818 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

【转】Hibernate缓存概述

 
阅读更多

http://developer.51cto.com 2009-06-29 08:48 佚名 163博客 我要评论(0)

  • 摘要:本文简单介绍Hibernate缓存。Hibernate缓存是介于物理数据源与应用程序之间,是数据库数据在内存中的存放临时copy的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用的运行性能。
  • 标签:Hibernate缓存
  • Oracle帮您准确洞察各个物流环节

1、Hibernate缓存概述

缓存是介于物理数据源与应用程序之间,是数据库数据在内存中的存放临时copy的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用的运行性能。

Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询,如果在缓存中找到了需要的数据(我们把这称做“缓存命中"),则就直接把命中的数据作为结果加以利用,避免了建立数据库查询的性能损耗。

2:Hibernate缓存分类

一级缓存(session):内部缓存

事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,当事务结束时,缓存也就结束生命周期。

二级缓存(sessionFactory):缓存被应用范围内的所有事务共享。

这些事务有可能是并发访问缓存,因此必须对缓存进行更新。

缓存的生命周期依赖于应用的生命周期,应用结束时,缓存也就结束了生命周期,二级缓存存在于应用范围。

集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。

缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致性,缓存中的数据通常采用对象的松散数据形式,二级缓存也存在与应用范围。

注意:对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存,再加上集群范围还有数据同步的问题,所以应当慎用。

多种范围的缓存处理过程

持久化层可以提供多种范围的缓存。如果在事务范围的缓存中没有查到相应的数据,

还可以到应用范围或集群范围的缓存内查询,如果还是没有查到,那么只有到数据库中查询了。

缓存应用的范围:

修改少,数量在可以接受的范围内

使用二级缓存的原则:

数据不会被第三方修改

同一数据系统经常引用

数据大小在可接受范围之内

关键数据或不会被并发更新的数据

hibernate引入第三方的缓存组件EHCACHE,下面是具体的实现步骤:

修改hibernate.cfg.xml配置引入ehCache缓存

  1. <hibernate-configuration>
  2. <session-factory>
  3. <property name="hibernate.cache.provider_class">
  4. net.sf.ehcache.hibernate.EhCacheProvider
  5. < /property>
  6. < !--query也支持缓存-->
  7. <property name="hibernate.cache.use_query_cache">true< /property>
  8. < /session-factory>
  9. < /hibernate-configuration>

在src根目录下加入ehcache.xml文件,具体内容如下:

  1. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">
  2. <defaultCache
  3. maxElementsInMemory="10000"
  4. eternal="false"
  5. timeToIdleSeconds="120"
  6. timeToLiveSeconds="120"
  7. overflowToDisk="true"
  8. />
  9. < /ehcache>

在映射文件中指定缓存同步策略

  1. <class name="com.tenly.bean.Student">
  2. <cache usage="read-write">
  3. <set name="classroom">
  4. <cache usage="read-only">
  5. < /set>
  6. < /class>

usage属性说明:

read-only:只读。对于不会发生改变的数据,可使用只读型缓存。

nonstrict-read-write:不严格可读写缓存。如果应用程序对并发访问下的数据同步要求不是很严格的话,

而且数据更新操作频率较低。采用本项,可获得良好的性能。

read-write

对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题.

transactional(事物型)

在Hibernate中,事务型缓存必须运行在JTA事务环境中。

在测试query时,说明其将用二级缓存

query.setCacheable(true);

释放Hibernate缓存:

一级缓存的释放

Session.evict(XXX)

将某个特定的对象从内部缓存中清除,上述的XXX 为对象的实例名。使用此方法有两种适用情形,

需要及时释放对象占用的内存维持系统的稳定性

是不希望当前Session继续运用此对象的状态变化来同步更新数据库。

Session.clear()清除所有的一级缓存

二级缓存的释放

SessionFacatoyr.evict(XXX)

将某个特定的对象从内部缓存中清除,上述的XXX 为对象的实例名。使用此方法有两种适用情形,

需要及时释放对象占用的内存维持系统的稳定性

是不希望当前Session继续运用此对象的状态变化来同步更新数据库。

SessionFactory.clear()清除所有的二级缓存

查询缓存:

二级缓存策略的一般过程:

Hibernate进行条件查询的时候,总是发出一条select * from XXX where …(XXX为 表名,

类似的语句下文统称Select SQL)这样的SQL语句查询数据库,一次获得所有的符合条件的数据对象。

把获得的所有数据对象根据ID放入到第二级缓存中。

当Hibernate根据ID访问数据对象的时候,首先从内部缓存中查找,如果在内部缓存中查不到就配置二级缓存,

从二级缓存中查;如果还查不到,再查询数据库,把结果按照ID放入到缓存。

添加数据、删除、更新操作时,同时更新二级缓存。这就是Hibernate做批处理的时候效率不高的原因,

原来是要维护二级缓存消耗大量时间的缘故。

条件查询的处理过程:

第一次查找age>20的所有学生信息,然后纳入二级缓存。

第二次我们的查询条件变了,查找age>15的所有学生信息,显然第一次查询的结果完全满足第二次查询的条件,

但并不是满足条件的全部数据。这样的话,我们就要再做一次查询得到全部数据才行。

如果我们执行的是相同的条件语句,Hibernate引入Query Cache的。

查询缓存策略的一般过程:

完全相同的Select SQL重复执行。

重复执行期间,Query Key对应的数据表不能有数据变动(比如添、删、改操作)

启用Query Cache,我们需要在hibernate.cfg.xml中进行配置,参考配置如下(只列出核心配置项):

  1. <hibernate-configuration>
  2. <session-factory>
  3. <property name="hibernate.cache.user_query_cache">true< /property>
  4. < /session-factory>
  5. < /hibernate-configuration>

在查询执行之前,将Query.Cacheable设置为true,而且每次都应该这样。比如:

Query query=session.createQuery(hql).setInteger(0.15);

query.setCacheable(true);

【编辑推荐】

  1. Hibernate创建命名策略
  2. Hibernate的unsaved-value
  3. Hibernate中get和load方法的区别
  4. Hibernate Session的saveOrUpdate()方法
  5. Hibernate二级缓存攻略
分享到:
评论

相关推荐

    Hibernate缓存深入详解

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

    Hibernate缓存

    Hibernate缓存讲解PPT 1.Hibernate缓存概述 2.Hibernate一级缓存(Session缓存) 3.Hibernate二级缓存 4.查询缓存 5.二级缓存的高级应用(分布式缓存)

    Hibernate学习笔记和资料

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

    深入浅出Hibernate(PDF)第一部分

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出Hibernate.pdf

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出Hibernate(PDF)第二部分

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出hibernate(PDF)第三部分

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    深入浅出Hibernate

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了 Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用...

    Hibernate实战(第2版 中文高清版)

     13.3.2 Hibernate高速缓存架构   13.4 高速缓存实践   13.4.1 选择并发控制策略   13.4.2 理解高速缓存区域   13.4.3 设置本地的高速缓存提供程序   13.4.4 设置重复的高速缓存   13.4.5 控制二级高速...

    深入浅出Hibernate2

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

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

     22.3 管理Hibernate的第一级缓存  22.4 管理Hibernate的第二级缓存  22.4.1 配置进程范围内的第二级缓存  22.4.2 配置集群范围内的第二级缓存  22.4.3 在应用程序中管理第二级缓存  22.4.4 Session与第二级...

    \深入浅出Hibernate

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    缓存配置文件

    Hibernate配置文件,缓存的配置路径概述

    《深入浅出Hibernate》1

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    第2章 Java对象持久化技术概述 21 业务数据在内存中表现为实体域对象形式,而在关系数据库中表现为关系数据形式。数据访问代码负责把实体域对象持久化到关系数据库中。 2.1 直接通过JDBC API来持久化实体域对象 21...

    夏昕.深入浅出Hibernate

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了 Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用...

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

     22.3 管理Hibernate的第一级缓存  22.4 管理Hibernate的第二级缓存  22.4.1 配置进程范围内的第二级缓存  22.4.2 配置集群范围内的第二级缓存  22.4.3 在应用程序中管理第二级缓存  22.4.4 Session与第二级...

Global site tag (gtag.js) - Google Analytics