`
星夜的遐想
  • 浏览: 190731 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate 二级缓存的配置和使用

阅读更多

用Hibernate做了些项目感觉Hibernat之所以如此流行主要是两个方面:

 

1、是一个Orm的轻量级实现,让我们可以使用面向对象的方式对数据库进行操作,显得更加方便,代码更加精炼。

2、提供了缓存机制,取数据时不一定要都查询数据库,可以从缓存中取,减少了访问数据库的次数,提高了性能。

 

缓存的概念:

 

缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。

 

Hibernate主要保存了两级缓存:

一级缓存:

就是Session缓存,由于Session对象的生命周期对应的是一个数据库事务或一个应用级事务,因此可以一级缓存是事务级的缓存,一级缓存是必须的,不允许而且事实上也是无法被卸载,在一级缓存中每个持久化的对象都有一个唯一的OID.

 

二级缓存:

可以说是一个可选的缓存插件。它是有SessionFactory负责管理。由于SessionFactory对于是程序整个过程,因此第二级缓存是进程或集群范围的缓存,因此可能出现并发性问题,因此要采用适当的事务隔离级别。这个缓存保存是对象的松散型数据,为了把第三方的插件和Hibernate集成起来,Hibernate提供了一个缓存适(org.hibernate.cache .CacheProvider),也就是一个接口让第三方插件产生的插件实现提供了好的标准。

 

 

为了很好的利用缓存带给我们好处,下面我们来看看二级缓存的配置方法:以org.hibernate.cache.EhCacheProvider
这个缓存插件的配置为例:

 

首先,我在Hibernte的核心配置文件中加上这么一段:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

	<session-factory>
		<property name="connection.username">sa</property>
		<property name="connection.url">
			jdbc:sqlserver://localhost:1433;databaseName=test
		</property>
		<property name="dialect">
			org.hibernate.dialect.SQLServerDialect
		</property>
		<property name="myeclipse.connection.profile">
			SQL Server2005
		</property>
		<property name="connection.password">123</property>
		<property name="connection.driver_class">
			com.microsoft.sqlserver.jdbc.SQLServerDriver
		</property>
		<property name="show_sql">true</property>
		<property name="sql_format">true</property>
		
		
	
		<!-- 声明使用二级缓存-->
		<property name="hibernate.cache.use_second_level_cache">true</property>
		 
		 
		 
		<!-- 配置二级缓存的实现类 -->
		<property name="hibernate.cache.provider_class">
			org.hibernate.cache.EhCacheProvider
		</property>
		
		
		
		<mapping resource="entity/Team.hbm.xml" />
		<mapping resource="entity/Student.hbm.xml" />
		 

	</session-factory>

</hibernate-configuration>

 

然后再对象映射文件的集合属性:

 

    <set name="students" cascade="all" inverse="true" lazy="false">
        
        	<!-- 对集合中的对象放入缓存中 -->
        	
        	<cache usage="read-write"/>
        	<key>
        		<column name="tid"></column>
        	</key>
        	<one-to-many class="entity.Student"/>
        </set>

 对集合中的类对应的配置问中的class标签下加入:

 

 <class name="Student" table="Student" >
    
    	<cache usage="read-write"/>

</class>

 

 

最后,我们还要针对缓存提供一个配置文件,放在项目的src目录下

 

文件名为:ehcache.xml,一般在我们下载的Hibernate框架包下面的etc文件夹中找的到。

 

如下:

<?xml version="1.0" encoding="UTF-8"?>

<!-- 缓存的配置文件 -->

<ehcache>
	<!-- 
	
		diskStore标签:硬盘保存
		
		属性:
		path:保存的位置	
		
	 -->
	<diskStore  path="D:/ehcache" />
	
	
	<!--
		defaultCache标签:指定默认的缓存配置:
		
		属性:
		maxElementsInMemory:在内存中保存对象的个数
		eternal:是否是不变的
		timeToIdleSeconds:从上次使用到过期的时间
		timeToLiveSeconds:对象自创建到过期存活时间
		overflowToDisk:超过内存的个数是否保存到硬盘
	  -->
	<defaultCache maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true" />
	
	<!-- 
		cache标签:对指定的类进行缓存配置
	
		属性和上面默认属性一样,如果设置了就覆盖上面的默认设置,没有设置,则引用默认设置
	 -->	
		
	<cache name="entity.Student"
        maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="300"
        timeToLiveSeconds="600"
        overflowToDisk="true" />

</ehcache>

<!--如果对象过期,当查询的时候不会打缓存当中找而会直接查询数据库-->

 

基本的配置也就这样子,如有不到位的地方希望各位同仁指点下啊

 

分享到:
评论

相关推荐

    hibernate一级缓存和二级缓存的区别与联系

    总结来说,Hibernate 的一级缓存和二级缓存都是为了提高数据访问效率,但它们在范围和并发控制方面有所不同。一级缓存是事务级别的,保证了数据的强一致性,而二级缓存提供了更多的灵活性,可以跨事务共享,但需要...

    hibernate二级缓存实例

    总的来说,"hibernate二级缓存实例"是一个很好的学习资源,它可以帮助我们理解二级缓存的工作机制,掌握如何在项目中配置和使用,以及注意潜在的问题和优化策略。通过实践,我们可以更好地运用这一技术,提升Java...

    Hibernate二级缓存

    Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...

    hibernate一级和二级缓存配置与详解

    本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...

    Spring集成的Hibernate配置二级缓存

    本文将详细探讨如何在Spring集成的Hibernate环境中配置二级缓存,以及其背后的原理和实践。 首先,我们需要了解什么是二级缓存。在Hibernate中,一级缓存是每个Session内部的缓存,它自动管理实体的状态,当一个...

    day37 05-HIbernate二级缓存:一级缓存更新同步到二级缓存及二级缓存配置文件

    以下是一个简单的二级缓存配置示例: ```xml &lt;hibernate-configuration&gt; &lt;!-- 配置缓存插件 --&gt; &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory ...

    hibernate 二级缓存详解

    总结来说,Hibernate的二级缓存是提升性能的关键手段,通过合理配置和使用,可以有效减少数据库交互,提高应用响应速度。需要注意的是,二级缓存虽然强大,但也需谨慎使用,防止数据一致性问题,尤其是在高并发环境...

    hibernate二级缓存示例源码

    综上所述,通过学习`hibernate二级缓存示例源码`,我们可以了解到如何在实际项目中配置和使用Hibernate二级缓存,从而提升系统的性能。在实际应用中,应结合具体场景选择合适的缓存策略,以达到最佳的性能优化效果。

    hibernate一级缓存、二级缓存和查询缓存

    **hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...

    hibernate二级缓存包

    综上所述,Hibernate二级缓存配合Ehcache使用,能够有效提升Java应用的性能,降低数据库压力,同时Ehcache提供的丰富功能和灵活性使其成为Java缓存领域中的热门选择。在实际项目中,正确配置和使用Ehcache,能够为...

    Hibernate一级缓存和二级缓存

    **二、Hibernate二级缓存** 二级缓存是SessionFactory级别的,跨越了多个Session,可以被多个线程共享。它通常由第三方插件如EhCache、Infinispan等提供。二级缓存分为以下几种类型: 1. **集合缓存**:用于存储...

    为Spring集成的Hibernate配置二级缓存

    在Java企业级开发中,Spring和Hibernate是两个非常...3. **配置Spring**:在Spring的配置文件(如`applicationContext.xml`)中,配置Hibernate SessionFactory,并注入二级缓存配置。以下是一个配置示例: ```xml ...

    springboot+jpa(hibernate配置redis为二级缓存) springboot2.1.4

    通过以上步骤,我们就成功地在Spring Boot 2.1.4.RELEASE项目中配置了使用Redis作为Hibernate二级缓存的环境。这将显著提升数据库查询效率,减少对数据库的压力,尤其在高并发场景下,效果尤为明显。记得在实际生产...

    Hibernate 二级缓存 总结整理

    在处理大数据量或高并发的场景下,为了提高性能和减少数据库负载,Hibernate 提供了二级缓存机制。本文将深入探讨Hibernate的二级缓存,并结合相关源码进行解析。 ### 一、一级缓存与二级缓存 1. **一级缓存...

    hibernate二级缓存java包下载

    - 类和集合的缓存配置:在实体类上使用 `@Cacheable` 注解,以及在集合属性上使用 `@Cache` 注解来指定哪些对象或集合需要被缓存。 - 缓存策略:可以选择读/写策略、只读策略、非事务性策略等,根据业务需求调整。...

    hibernate 二级缓存

    本篇文章将深入探讨Hibernate二级缓存的概念、工作原理以及如何在实际项目中设置和使用。 **一、二级缓存概念** 一级缓存是每个Hibernate Session内部的一个内存区域,用于存储Session期间的操作对象。当Session...

    hibernate二级缓存所需要的 jar包

    本篇将详细介绍Hibernate二级缓存的概念、作用以及所需jar包的作用。 一、Hibernate二级缓存概念 Hibernate的一级缓存是指Session级别的缓存,每个Session内部都有一个一级缓存,用于存储实体对象,当Session关闭时...

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

    描述部分提到的“博文链接:https://zhaoshijie.iteye.com/blog/998230”虽然没有提供具体信息,但可以推断出这是一个完整的博客文章,其中详细阐述了关于Hibernate二级缓存的使用和实现,可能包括了配置、注解的...

    hibernate二级缓存要导入的包

    本压缩包提供的资源应该包含了实现Hibernate二级缓存所需的关键组件和库文件。 一级缓存是Hibernate Session内的缓存,它是每个Session实例独有的,当Session关闭时,一级缓存中的数据也会被清除。而二级缓存则是一...

Global site tag (gtag.js) - Google Analytics