`
fehly
  • 浏览: 247526 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate的缓存

阅读更多

持久层缓存的级别

  • 事务级别的缓存
  • 应用(进程)级别的缓存
  • 分布式级别的缓存

Hibernate的一级缓存
Hibernate中的缓存分成两级:一级缓存和二级缓存
Hibernate的一级缓存是内置的缓存,不能通过程序代码或者配置进行人为的取消,同时一级

缓存通过Session对象实现缓存,所以一级缓存也称为Session缓存

 

一级缓存的管理

使用evict()方法从缓存中移除缓存对象
使用clear()方法从缓存中清除所有对象
使用Session对象contains()判断是否在缓存中(true/false)、flush()和setReadOnly()方法

 

Hibernate的二级缓存

Hibernate的二级缓存由SessionFactory对象负责管理,是应用级别的缓存,可以缓存整个应

用的持久化对象
Hibernate的二级缓存又称SessionFactory缓存

 

Hibernate的二级缓存

 

缓存名称                   缓存类型                                对应的适配器类
Hashtable                 内存                                    org.hibernate.cache.HashtableCacheProvider
EHCache               内存,硬盘                               org.hibernate.cache.EhCacheProvider
OSCache               内存,硬盘                              org.hibernate.cache.OSCacheProvider
SwarmCahe     分布式(不支持分布式事务)               org.hibernate.cache.SwarmCacheProvider
JBoss Cache1.x 分布式(支持分布式事务)                 org.hibernate.cache.TreeCacheProvider
JBoss Cache2. 分布式(支持分布式事务)                   org.hibernate.cache.jbc2.JBossCacheRegionFactory

 

EHCache作为二级缓存

应用EHCache作为二级缓存

<hibernate-configuration>
	<session-factory>
		<property name="cache.provider_class">
			org.hibernate.cache.EhCacheProvider
		</property>
	</session-factory>
</hibernate-configuration>

 

编写ehcache.xml

<ehcache>
	<diskStore path="java.io.tmpdir" />
	<defaultCache maxElementsInMemory="10000" eternal="false"
		timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" />
		
	<cache name="com.rbh.examples.Product" maxElementsInMemory="2000" eternal="true"
		timeToIdleSeconds="0" timeToLiveSeconds="0" overflowToDisk="false" />
</ehcache>

 maxElementsInMemory 设置保存在内存中的缓存对象的最大数量
eternal 设置缓存中对象是否永远不过期,如果值为true,超过设置被忽略,缓存对象永不过期
timeToIdleSeconds 设置缓存中对象在它过期之前的最大空闲时间,单位为秒
timeToLiveSeconds 设置缓存中对象在它过期之前的最大生存时间,单位为秒
overflowToDisk 设置内存中的缓存对象达到maxElementsInMemory限制时,是否将缓存对象保存到硬盘中

 

二级缓存的策略

只读缓存(read-only)
读/写缓存(read-write)
不严格的读/写缓存(nonstrict-read-write)
事务缓存(transactional)

 

缓存组件对缓存策略的支持

 

在对应的持久化类中设定使用缓存的策略

添加

<cache usage="read-write" />

 list读取数据,读的数据可以帮助增加二级缓存,不会读取缓存中的数据.
iterator会查询二级缓存数据,如果读的数据不在二级缓存 n+1次查询记录

 

二级缓存 缓存集合对象

demo

ehcache.xml

<ehcache>
	<cache name="com.rbh.examples.Category" maxElementsInMemory="2000" eternal="true"
		timeToIdleSeconds="0" timeToLiveSeconds="0" overflowToDisk="false" />
	 
	<cache name="com.rbh.examples.Category.products" maxElementsInMemory="1000" eternal="true"
		timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="false" />
</ehcache>

 Category.hbm.xml

<hibernate-mapping>
	<class name="com.rbh.examples.Category" table="CATEGORY">
	 <cache usage="read-write" />
	<set name="products" cascade="save-update" inverse="true">
		    <cache usage="read-write" />
			<key column="category_id"></key>
			<one-to-many class="com.rbh.examples.Product" />
		</set>
		</class>
</hibernate-mapping>

 

二级缓存的管理
SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evict(Category.class);
把二级缓存的Category的对象全部清除


SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evictCollection("com.rbh.examples.Category.products");
把Category对象的下的products集合所缓存的对象清除


SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evictEntity("com.rbh.examples.Category");
把Category对应的所有持久化对象的二级缓存都清除


SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evictEntity("com.rbh.examples.Category",new Integer(1));
把指定的持久化对象二级缓存清除

 

查询缓存(Query Cache)

<hibernate-configuration>
	<session-factory>
		<property name="cache.provider_class">
			org.hibernate.cache.EhCacheProvider
		</property>
		<property name="hibernate.cache.use_query_cache">true</property>
	</session-factory>
</hibernate-configuration>

 

Transaction tx = session.beginTransaction();
Query query = session.createQuery("from Category");
query.setCacheable(true);
List<Category> list = query.list();

 

memcached作为二级缓存

memcached是一款知名的,高性能的,分布式的内存对象缓存系统,主要用于在web应用中降低数据库的负载,它通过缓存数据库的查询结果,减少对数据库的访问次数,用以提高web应用的访问速度

Hibernate-memcached
Hibernate-memcached是CacheProvider接口的memcached实现

需要用到 memcached-2.x.jar,spy-2.4.jar,commons-codec-1.x.jar,hibernate-memcached-1.2.2.jar

使用memcached windows的服务器

添加Hibernate.hbm.xml

<property name="cache.provider_class">
	com.googlecode.hibernate.memcached.MemcachedCacheProvider 
</property>

 

 

分享到:
评论

相关推荐

    Hibernate缓存深入详解 from ITEye

    **Hibernate缓存深入详解** 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据访问性能成为了一个不可忽视的问题。这时,...

    Hibernate缓存技术研究

    ### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...

    Hibernate缓存.doc

    Hibernate缓存.docHibernate缓存.doc

    Java Hibernate缓存深入详解

    Java Hibernate缓存深入详解

    hibernate缓存

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

    Hibernate缓存与spring事务详解

    **标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...

    hibernate缓存机制

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

    hibernate缓存深入详解.

    关于hibernate缓存的一个ppt课件,60+幻灯片,有需要的可以看一下

    Hibernate缓存深入详解

    【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...

    Hibernate缓存详解

    **Hibernate缓存详解** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。为了提高数据访问性能,Hibernate引入了缓存机制,它可以减少对数据库的直接访问,从而提升应用的...

    Hibernate缓存,性能优化

    本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### Hibernate缓存原理 Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动...

    hibernate缓存和事务

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许Java...通过理解Hibernate缓存和事务管理,以及如何有效地执行查询,开发者可以创建高效、健壮的Java应用程序,降低与数据库交互的复杂性,同时提升系统性能。

    Hibernate教程25_Hibernate缓存

    **标题解析:** "Hibernate教程25_Hibernate缓存" 这个标题表明了我们要讨论的是关于Hibernate框架的第25个教程,重点是它的缓存机制。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的...

    Hibernate缓存管理.doc

    【Hibernate缓存管理】是数据库持久化框架Hibernate中优化性能的关键技术。缓存的主要目的是减少对数据库的直接访问,提高应用程序的运行效率。缓存的数据是数据库中数据的副本,存在于内存或硬盘中,便于快速读取。...

    hibernate缓存ehcache用法

    这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时保存经常访问的数据,以减少对主存储器(如数据库)的...

    hibernate 缓存

    【Hibernate缓存详解】 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。其缓存机制是提升系统性能的关键所在。本篇将深入探讨Hibernate的缓存机制,包括一级缓存和二级...

Global site tag (gtag.js) - Google Analytics