`
翩跹吉吉
  • 浏览: 103462 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

”一天一节“之Hibernate的缓存机制

    博客分类:
  • J2EE
阅读更多

Hibernate的缓存机制 

 

Hibernate的数据缓存根据它的作用范围或生命周期的不同大致分为两种:一级缓存和二级缓存,下面分别说明下两个缓存:

 

 

1. 一级缓存

Hibernate的一级缓存作用范围是在同一个session下,也就是在同一个事务级别下,它随着session的销亡而销亡。Hibernate的一级缓存一般情况下是由hibernate自行维护的,如果我们要手动去维护,hibernate也提供了两个方法:

session.evict(Object obj)//将某个特定的的对象从一级缓存中清除出去

Session.clear() //清除一级缓存中的所有对象

 

 

Hibernate一级缓存的实现原理,也是非常简单的,这里针对hibernate2来说明下,在Session接口的实现类SessionImpl中定义了许多的Map对象,这些Map维护这与当前session相关联的所以PO状态,当我们查询实体对象时,会首先根据id和加载类与在对应的Map结构中匹配,如果命中则直接讲结果对象返回,否则到数据库中去加载数据,并将加载对象放入这些Map中进行管理。另外这些Map结构都是私有的,所以说明了一级缓存是随着session的销亡而销亡的。

 

 

2. 二级缓存

Hibernate的二级缓存作用范围是一个SessionFactory下的所有session实现共享,其随着SessionFactory的关闭而消亡。

 

虽然说二级缓存可以带来性能上的优化但是还是要因事而论,比如一个聊天系统里提供一个查看用户历史聊天记录,可能要查询近几个月所有的记录,而且基本上这些记录不可能被共享(本用户只查看自己的记录),如果这里使用缓存管理,并且是多用户并行操作,可想而知会给内存带来什么后果!

  

Hibernate本身其实并没有对二级缓存提供很好的实现(只提供了一个基于hashtable的简单实现以供调试),而是为众多第三方实现提供了接口。下面来看个基于EHCache的二级缓存配置实现:

1. 导入ehcache.1.2.3.jar包;

2. 配置ehcache.xml

 

 

	<?xml version="1.0" encoding="UTF-8"?>
	<ehcache>
	 <diskStore path="java.io.tmpdir"/> 
	  <defaultCache
	   maxElementsInMemory="10000" <!-- 缓存最大数目 -->
	   eternal="false" <!-- 缓存是否持久 -->
	   overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时-->
	   timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 -->
	   timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁-->
	   diskPersistent="false"
	   diskEXPiryThreadIntervalSeconds= "120"/> 
	</ehcache> 

 

3. Hibernate配置文件中设置:

	<!-- 配置 hibernate 二级缓存 -->
	<property name="hibernate.cache.use_second_level_cache">true
	</property>
<property ame="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider
</property>

 

<!--EndFragment-->

4.在Hbm文件中添加<cache usage="read-only"/>

 

测试代码:

public static void main(String[] args) {
    long star = System.currentTimeMillis();
		
    Session session = HibernateUtils.getSession();
    Transaction tr = session.beginTransaction();
    Query query = session.createQuery("from User3");
    System.out.println(((User3)query.iterate().next()).getName());
    tr.commit();
    session.close();
		
    Session session1 = HibernateUtils.getSession();
    Transaction tr1 = session1.beginTransaction();
    Query query1 = session1.createQuery("from User3");
    System.out.println(((User3)query1.iterate().nex()).getName());
    tr1.commit();
    session1.close();
		
    System.out.println( System.currentTimeMillis() - star +" ms");
				
}

 

 

<!--EndFragment-->

 

 

<!--EndFragment-->

 

0
0
分享到:
评论

相关推荐

    hibernate缓存机制

    Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...

    HIBERNATE的缓存机制

    总结来说,Hibernate的缓存机制包括一级缓存和二级缓存,它们协同工作以优化数据库操作。一级缓存是必不可少的,提供事务级别的数据管理;二级缓存则是可选的,用于进一步提升性能,但需要根据数据的特性和访问模式...

    Hibernate缓存机制.txt

    Hibernate缓存机制.txt

    Hibernate缓存机制,转载

    **描述:**这篇博客主要探讨了Hibernate框架中的缓存机制,包括一级缓存和二级缓存的概念、工作原理以及如何在实际开发中应用。 **标签:“源码 工具”** **知识点详解:** **1. Hibernate概述:** Hibernate是一...

    hibernate缓存机制分析共17页.pdf.zip

    本文将深入探讨Hibernate的缓存机制,包括一级缓存、二级缓存和查询缓存,以及如何配置和使用它们。 一、一级缓存 一级缓存,也称为Session缓存,是Hibernate内置的默认缓存。每当我们在Session中进行持久化操作时...

    Hibernate缓存机制

    h​i​b​e​r​n​a​t​e​缓​存​机​制​,​你​必​须​学​的​持​久​层​技​术​。

    Hibernate缓存机制探讨

    本文将深入探讨Hibernate的缓存机制,帮助开发者理解如何有效地利用缓存提高应用性能。 首先,我们需要了解缓存的基本概念。缓存是一种存储技术,用于临时存储经常访问的数据,以减少对主存储器(如硬盘或网络)的...

    Hibernate缓存机制解说

    ## Hibernate缓存机制详解 ### 一、缓存分类与管理 Hibernate提供了两种主要的缓存类型:一级缓存和二级缓存。 #### 1. 一级缓存 一级缓存也称为Session缓存,它在同一个Session中对数据的多次读取操作只需要一...

    Hibernate缓存机制探讨.doc

    ### Hibernate缓存机制详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它简化了 Java 应用程序与数据库交互的过程。然而,直接使用 JDBC 访问数据库存在一定的性能开销。为了提升性能,Hibernate ...

    深入理解Hibernate缓存

    其中,缓存机制是Hibernate性能优化的重要组成部分之一。理解Hibernate缓存的工作原理及配置方法对于提高应用性能具有重要意义。 在Hibernate中,缓存分为一级缓存(第一级缓存)和二级缓存(第二级缓存)。一级...

    Hibernate缓存深入详解 from ITEye

    这时,Hibernate的缓存机制就显得尤为重要。本篇深入详解将带你了解Hibernate缓存的原理、类型以及最佳实践。 **一、Hibernate缓存概述** Hibernate的缓存机制主要是为了减少对数据库的直接访问,提高系统性能。它...

    Hibernate缓存机制深入浅出

    Hibernate缓存介于Hibernate应用和数据库之间,缓存中存放了数据库数据的拷贝。 其作用是减少访问数据库的频率,从而提高应用的运行性能

    Hibernate缓存.doc

    Hibernate缓存.docHibernate缓存.doc

    Hibernate缓存技术研究

    ### Hibernate缓存技术研究 #### 一、引言 ...总之,Hibernate的缓存机制是提高应用程序性能的关键技术之一。通过对缓存结构的理解以及合理配置缓存策略,可以有效地提高数据访问效率,减少数据库的负担。

    Hibernate的缓存机制

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

    hibernate的缓存机制

    **标题:“Hibernate的缓存机制”** 在Java的持久化框架Hibernate中,缓存机制扮演着至关重要的角色,它能够显著提升数据访问的性能。缓存可以分为一级缓存和二级缓存,以及查询缓存。 **一级缓存**: 一级缓存是...

Global site tag (gtag.js) - Google Analytics