`
gogototo
  • 浏览: 35403 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Hibernate缓存概述

阅读更多
1、Hibernate缓存概述 缓存是介于物理数据源与应用程序之间,是数据库数据在内存中的存放临时copy的容器, 其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用的运行性能。 Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询, 如果在缓存中找到了需要的数据(我们把这称做“缓存命中"),则就直接把命中的数据作为结果加以利用, 避免了建立数据库查询的性能损耗。 2:Hibernate缓存分类 一级缓存(session):内部缓存 事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期, 当事务结束时,缓存也就结束生命周期。 二级缓存(sessionFactory):缓存被应用范围内的所有事务共享。 这些事务有可能是并发访问缓存,因此必须对缓存进行更新。 缓存的生命周期依赖于应用的生命周期,应用结束时, 缓存也就结束了生命周期,二级缓存存在于应用范围。 集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。 缓存中的数据被复制到集群环境中的每个进程节点, 进程间通过远程通信来保证缓存中的数据的一致性, 缓存中的数据通常采用对象的松散数据形式,二级缓存也存在与应用范围。 注意:对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存, 再加上集群范围还有数据同步的问题,所以应当慎用。 多种范围的缓存处理过程 持久化层可以提供多种范围的缓存。如果在事务范围的缓存中没有查到相应的数据, 还可以到应用范围或集群范围的缓存内查询,如果还是没有查到,那么只有到数据库中查询了。 缓存应用的范围: 修改少,数量在可以接受的范围内 5、使用二级缓存的原则: 数据不会被第三方修改 同一数据系统经常引用 数据大小在可接受范围之内 关键数据或不会被并发更新的数据 5、hibernate引入第三方的缓存组件EHCACHE,下面是具体的实现步骤: 修改hibernate.cfg.xml配置引入ehCache缓存 <hibernate-configuration><session-factory><property name="hibernate.cache.provider_class"> net.sf.ehcache.hibernate.EhCacheProvider </property><!--query也支持缓存--><property name="hibernate.cache.use_query_cache">true</property></session-factory></hibernate-configuration> 在src根目录下加入ehcache.xml文件,具体内容如下: <ehcache xsi="http://www.w3.org/2001/XMLSchema-instance" nonamespaceschemalocation="ehcache.xsd"><defaultcache maxelementsinmemory="10000" eternal="false" timetoidleseconds="120" timetoliveseconds="120" overflowtodisk="true"></defaultcache></ehcache> 在映射文件中指定缓存同步策略 <class name="com.tenly.bean.Student"><cache usage="read-write"><set name="classroom"><cache usage="read-only"></cache></set></cache></class> usage属性说明: read-only:只读。对于不会发生改变的数据,可使用只读型缓存。 nonstrict-read-write:不严格可读写缓存。如果应用程序对并发访问下的数据同步要求不是很严格的话, 而且数据更新操作频率较低。采用本项,可获得良好的性能。 read-write 对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题. transactional(事物型) 在Hibernate中,事务型缓存必须运行在JTA事务环境中。 在测试query时,说明其将用二级缓存 query.setCacheable(true); 3、释放缓存: 一级缓存的释放 Session.evict(XXX) 将某个特定的对象从内部缓存中清除,上述的XXX 为对象的实例名。使用此方法有两种适用情形, 需要及时释放对象占用的内存维持系统的稳定性 是不希望当前Session继续运用此对象的状态变化来同步更新数据库。 Session.clear()清除所有的一级缓存 二级缓存的释放 SessionFacatoyr.evict(XXX) 将某个特定的对象从内部缓存中清除,上述的XXX 为对象的实例名。使用此方法有两种适用情形, 需要及时释放对象占用的内存维持系统的稳定性 是不希望当前Session继续运用此对象的状态变化来同步更新数据库。 SessionFactory.clear()清除所有的二级缓存 6、查询缓存: 二级缓存策略的一般过程: 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中进行配置,参考配置如下(只列出核心配置项): <hibernate-configuration><session-factory><property name="hibernate.cache.user_query_cache">true</property></session-factory></hibernate-configuration> 在查询执行之前,将Query.Cacheable设置为true,而且每次都应该这样。比如: Query query=session.createQuery(hql).setInteger(0.15); query.setCacheable(true);
分享到:
评论

相关推荐

    Hibernate缓存深入详解 from ITEye

    **一、Hibernate缓存概述** Hibernate的缓存机制主要是为了减少对数据库的直接访问,提高系统性能。它通过在内存中存储数据来加快数据访问速度,分为一级缓存和二级缓存。 **二、一级缓存** 一级缓存是...

    Hibernate缓存深入详解

    Hibernate缓存概述** Hibernate提供了两级缓存:一级缓存和二级缓存。一级缓存是Session级别的,而二级缓存则是SessionFactory级别的全局缓存。这两级缓存都位于持久化层,存储着数据库数据的拷贝。 **2. 一级...

    Hibernate缓存详解

    Hibernate缓存概述 缓存是存储在内存中的临时数据,当应用程序需要数据时,首先从缓存中查找,而不是直接查询数据库。这样可以减少网络延迟,提高数据访问效率。Hibernate的缓存分为一级缓存和二级缓存。 ### 2. ...

    Hibernate缓存深入详解.ppt

    1-1 Hibernate缓存概述 缓存对于Hibernate的性能优化至关重要,因为它能减少对数据库的直接操作。在Hibernate中,缓存处于持久化层,存储了数据库数据的副本。当应用程序需要数据时,首先会在缓存中查找,如果找到,...

    hibernate 缓存

    Hibernate缓存概述 **缓存的作用**:减少对数据库的访问次数,从而提高应用性能。Hibernate缓存位于应用和数据库之间,存储着数据库数据的副本。当需要数据时,Hibernate首先会在缓存中查找,若找到所需数据(称为...

    Hibernate缓存

    1-1 Hibernate缓存概述: Hibernate提供了两种级别的缓存:一级缓存和二级缓存。一级缓存是Session级别的,而二级缓存是SessionFactory级别的全局缓存。这两个缓存都是为了存储持久化对象,以减少与数据库的交互。 ...

    hibernate缓存解析

    Hibernate缓存概述** Hibernate的一级缓存是Session级别的,也称为事务范围的缓存,它的生命周期与当前事务绑定。当事务结束,一级缓存中的数据也会被清除。一级缓存主要存储由Session管理的对象,当对象被持久化...

    hibernate二级缓存(包括注解方式)

    Hibernate缓存概述 Hibernate缓存主要分为一级缓存和二级缓存。一级缓存是Session级别的,它是内建的,无需配置,对同一个Session内的对象进行多次读取时,直接从内存中获取,避免了重复的数据库查询。二级缓存是...

    Hibernate缓存机制

    **1.1 Hibernate缓存概述** Hibernate作为一款流行的Java持久层框架,其缓存机制是提高应用程序性能的关键之一。缓存的主要作用在于减少数据库访问次数,从而提高应用的响应速度。在Hibernate中,缓存分为两个级别...

    Hibernate的缓存机制

    #### Hibernate缓存概述 Hibernate作为一款流行的Java持久层框架,提供了强大的缓存机制,支持不同级别的缓存来优化数据访问性能。Hibernate缓存主要包括两个层面:一级缓存(第一级缓存)和二级缓存(第二级缓存)...

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

    #### 二、Hibernate缓存概述 Hibernate提供了不同层次的缓存支持: 1. **一级缓存**:即`Session`缓存,它是默认启用的,用于存储当前`Session`中的数据。 2. **二级缓存**:即`SessionFactory`级别的缓存,可选...

    hibernate缓存

    ### Hibernate缓存机制及优化策略 #### 一、概述 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域被广泛应用于数据库操作。它提供了丰富的缓存机制来提高应用性能并降低数据库访问压力。本文将...

    hibernate caching

    #### 二、Hibernate 缓存概述 Hibernate 提供了两种不同的缓存机制用于缓存对象:一级缓存和二级缓存。 ##### 一级缓存 (First-level Cache) - **作用范围**:与 Session 对象关联。 - **特点**: - Hibernate ...

Global site tag (gtag.js) - Google Analytics