Hibernate的缓存分为两个级别:
一级缓存:指的是Session的缓存,所有使用同一个Session通过get或load查询的数据,都会保存在缓存中,下次再查询时,先从缓存中查找,如果找到,则不会再查询数据库,当Session关闭时,自动销毁。一般开发中不会使用,因为Session需要关闭。
二级缓存:保存在SessionFactory中,因此可以多个Session共同使用,二级缓存需要第三方的支持。可以使用oscache、ehcache之类缓存支持。默认Hibernate中加入的为ehcache缓存,这些缓存数据在一定时间后或SessionFactory销毁时自动销毁。
一、在hibernate.cfg.xml中配置使用二级缓存
1、在hibernate.cfg.xml中配置使用二级缓存,配置缓存支持类
[img]image001.jpg [/img]
2、还需要配置使用缓存的设置
[img]image002.jpg [/img]
3、配置使用二级缓存
[img]image003.jpg [/img]
二、在需要使用缓存查询的映射文件中,加入使用缓存的配置
<cache usage="read-only"/>
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
其中usage表示使用缓存的模式,默认为read-only,可以使用以下4种,其中第4种已经不使用了:
read-only:缓存为只读,缓存中的数据不可以被修改,在数据查询要求不严格时使用,而且数据库数据改变的不多。
read-write:可以读写的,当数据库中数据修改时,同时对缓存中的数据进行修改,数据准确性很高,但如果频繁修改,性能相对比较低。
nonstrict-read-write:不严格的可读写模式,不是当数据库中数据修改就立刻修改缓存中的数据,而是一定时间后,对数据库和缓存进行比较,如果有数据不同,则进行数据同步。
transactional:事务处理的方式,但目前read-write已经支持了事务操作,因此该模式已经不使用了。
三、在src下加入ehcache.xml配置文件
需要在src下加入ehcache.xml配置文件,该文件可以在hibernate开发包hibernate-3.2\etc中查找到
<ehcache>
<!-- 表示缓存文件所保存的临时路径,java.io.tmpdir表示JDK所临时保存文件的路径 -->
<diskStore path="java.io.tmpdir"/>
<!--
以下为默认缓存配置,如果没有进行单独的配置,使用该配置进行缓存的保存:
maxInMemory - 设置内存中可以创建pojo数据的最大数量(针对一个pojo)
eternal - 设置缓存中的数据是否永久存在.如果为true, 当超过时间后,数据也不销毁.
timeToIdleSeconds - 设置从缓存对象创建后经过多长时间自动销毁. 只有当eternal为false时才可以使用. 单位为秒
timeToLiveSeconds - 设置缓存对象经过一次查询后,多长时间不再被查询后自动销毁(闲置时间).
overflowToDisk - 如果为true,则当数据数量超出范围后(InMemory中的范围)后,是否保存到硬盘上(保存的位置在上面的diskStore中定义).
-->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="600"
timeToLiveSeconds="120"
overflowToDisk="true"
/>
<!--
也可以自定义某一个类所使用的设置
name表示该类的包.类名
-->
<cache name="org.liky.pojo.Area"
maxElementsInMemory="20000"
eternal="false"
timeToIdleSeconds="1200"
timeToLiveSeconds="300"
overflowToDisk="true"
/>
</ehcache>
四、修改实现类(使用二级缓存)
修改实现类,实现类中需要为query或criteria设置打开缓存查询属性
public List<Area> findAll() throws Exception {
// TODO Auto-generated method stub
Criteria c = this.instance.getConnnection().createCriteria(Area.class);
// 设置使用缓存
c.setCacheable(true);
return c.list();
}
五、测试说明
缓存只能在对单个类操作时使用,如果使用了级联查询,则无法对缓存进行处理。
- 大小: 17.5 KB
- 大小: 16.3 KB
- 大小: 16.4 KB
分享到:
相关推荐
### Hibernate二级缓存技术详解 #### 一、概述 Hibernate 是一个开源的对象关系映射(ORM)框架,它简化了Java应用与关系型数据库之间的交互。为了提高性能和减少数据库的访问频率,Hibernate 提供了一级缓存和二...
在这个"hibernate二级缓存实例"中,我们将深入探讨二级缓存的原理、配置以及在实际项目中的应用。 首先,我们需要了解一级缓存和二级缓存的区别。一级缓存是Session级别的,每个Session都有自己的一级缓存,用于...
Hibernate二级缓存是一种提高应用程序性能的技术,它将数据存储在SessionFactory级别的缓存中,使得数据可以在不同的Session之间共享。这与一级缓存(Session级别)不同,一级缓存仅存在于单个Session生命周期内,当...
Hibernate二级缓存是Java开发中使用Hibernate框架进行数据持久化时优化性能的一种重要技术。它在一级缓存(Session级别的缓存)的基础上,提供了一个全局的、跨会话的数据存储层,可以显著减少对数据库的访问,从而...
**二、Hibernate二级缓存** 二级缓存是SessionFactory级别的,跨越了多个Session,可以被多个线程共享。它通常由第三方插件如EhCache、Infinispan等提供。二级缓存分为以下几种类型: 1. **集合缓存**:用于存储...
通过以上步骤,我们就成功地在Spring Boot 2.1.4.RELEASE项目中配置了使用Redis作为Hibernate二级缓存的环境。这将显著提升数据库查询效率,减少对数据库的压力,尤其在高并发场景下,效果尤为明显。记得在实际生产...
在 Hibernate 中,二级缓存和查询缓存是提高应用性能的重要机制。下面将详细介绍如何开启并理解这两个缓存机制。 ### 1. 一级缓存与二级缓存 #### 1.1 一级缓存 一级缓存是 Hibernate 内置的 Session 缓存,它是每...
《Hibernate二级缓存配置详解》 在Java的持久化框架Hibernate中,缓存技术是提升系统性能的关键之一。本文将深入探讨Hibernate的二级缓存,包括其事务范围、进程范围和集群范围的配置,特别是关注进程范围内的...
Ehcache是Hibernate的一个可选二级缓存插件,用于存储数据库查询结果,减少对数据库的直接访问。当相同的数据再次被请求时,可以从缓存中快速获取,提高系统响应速度。在不使用缓存的情况下,可以通过配置关闭。 5...
Hibernate二级缓存是Java开发中使用Hibernate框架时提高性能的重要机制。它是一种持久化层缓存,用于存储从数据库中加载的对象,以便后续请求可以快速访问这些数据,而无需每次都直接查询数据库。在大型应用程序中,...
### Hibernate二级缓存详解 #### 一、概述与背景 Hibernate作为一款优秀的Java持久层框架,在提高开发效率的同时,也面临着性能优化的问题。缓存机制是解决这一问题的关键技术之一。Hibernate提供了两种缓存机制:...
【标题】:“Hibernate二级缓存(Ehcache)” 【正文】: Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的方式来处理数据库操作。然而,随着应用规模的扩大,性能优化变得至关重要,...
**标题:“Hibernate二级缓存的应用”** 在Java的持久化框架Hibernate中,一级缓存是默认存在的,每个Session都有自己的缓存,而二级缓存则是可选的,它跨越了多个Session,为整个SessionFactory提供数据共享。二级...
阅读该文档将有助于深入理解并掌握Hibernate二级缓存的应用。 综上所述,Hibernate的二级缓存是提升Java应用程序性能的有效手段,但同时也需要谨慎对待,合理配置和使用,以防止可能带来的数据一致性问题。通过深入...
Hibernate+ehcache二级缓存技术 Hibernate+ehcache二级缓存技术
通过本次实验,不仅深入了解了Hibernate二级缓存的基本概念和工作原理,还掌握了如何通过配置来优化二级缓存的使用。实践证明,合理的缓存策略能够显著提升系统的性能表现。在实际开发过程中,还需要结合具体的应用...
本文将深入探讨Hibernate的一级缓存和二级缓存,以及二级缓存的数据存储结构。 首先,一级缓存是Hibernate默认提供的缓存,每个Session都有一个独立的一级缓存。当我们在操作数据库时,例如查询或更新记录,这些...
标题中的“Hibernate二级缓存:集合缓冲区特点”是指在使用Hibernate进行数据库操作时,对二级缓存中集合数据管理的特性和优化策略。Hibernate是一个流行的Java ORM(对象关系映射)框架,它允许开发者以面向对象的...
在IT行业中,数据库操作是...在给出的压缩包文件"hibernate3_day03"中,可能包含了与Hibernate二级缓存相关的代码示例、配置文件或者教程文档,进一步的学习和实践可以从这些资源入手,加深对二级缓存的理解和运用。