数据缓存---持久层性能提升的关键。
缓存:是数据库数据在内存中的临时容器,它包含了库表数据在内存中的临时拷贝,位于数据库与数据访问层之间。
ORM数据读取:首选缓存,查到则返回,避免了数据库调用的性能开销。
对于企业级应用,数据库与应用服务器位于不同的物理服务器,也就是每次数据库访问都是一次远程调用--Socket的创建于销毁,数据的打拆包,数据库执行查询指令,网络传输的延时等。
(1) 数据缓存策略
ORM的数据缓存应包含:
a、事务级缓存(事务范围内):基于Session生命周期。
b、应用级/进程级缓存(在SessionFactory层实现),所有由此SessionFactory创建的Session实例共享此缓存。但在多实例并发运行会产生问题:A,B共享同一数据库,各自维持其缓存,A对数据库进行了更新,B缓存数据仍为更新前。
c、分布式缓存(在所个应用实例,多个JVM之间共享的缓存模式),由多个应用级缓存实例组成集群。---解决了多实例并发运行过程中的数据同步问题。
注意:如果当前应用于其它应用共享数据库,采取一些保守策略(避免缓存机制的使用)可能更加稳妥。
(2) Hibernate数据缓存
a、内部缓存(Session Level)
b、二级缓存(SessionFactory Level)
Hibernate缓存发挥作用的情况:
a、通过id(主键)加载数据时 ---Session.load(),Session.iterate()
b、延迟加载
内部缓存:应用事务级缓存,由Hibernate自动维护,可通过以下方法手动干预。
Session.evict---将某个特定对象从内存缓存中清除。
Session.clear---清空内部缓存。
二级缓存:涵盖了应用级缓存和分布式缓存。
Session在进行数据查询操作时,会首先在自身内部的一级缓存中进行查找,如果一级缓存未能命中,则在二级缓存中查询,如果二级缓存命中,则以此数据作为结果返回。
引入二级缓存需要考虑的问题:
(1),数据库是否与其它应用共享
(2),应用是否需要部署在集群环境中
满足以下条件,则可将其纳入缓存管理
(1),数据不会被第三方应用修改
(2),数据大小载客接受的范围之内
(3),数据更新频率较低
(4),同一数据可能会被系统频繁使用
(5),非关键数据(关键数据,如金融账户数据)
(3) 第三方缓存实现
(1),JCS--某些情况下可能导致内存泄漏以及死锁。
(2),EHCache--默认---无法做到分布式缓存。
(3),OSCache
(4),JBoss Cache--提供分布式缓存(Repplication方式)
(5),SwarmCache--提供分布式缓存(invalidation方式)
Hibernate中启用二级缓存,需配置hibernate.cfg.xml如下:
<hibernate-configutarion>
<session-factory>
......
<property name="hibernate.cache.provider_class">
net.sf.ehcache.hibernate.Provider
<property>
......
</session-factory>
<hibernate-configuration>
还需要配置ehcache.xml。
之后,需要在我们的映射文件中指定各个映射实体(以及collection)的缓存同步策略:
<class name="TUser">
<cache usage="read-write"/>
...
<set name="addresses" ...>
<cache usage="read-write"/>
...
</set>
</class>
(4) 缓存同步策略
--为了使得缓存调度遵循正确的应用级事务隔离机制,必须为每个实体类指定相应的缓存同步策略。
4种内置的缓存同步策略:read-only,nonstrict-read-write,read-write,transactional(JTA,此时的缓存类似一个内存数据库)
分享到:
相关推荐
本篇文章将详细阐述 Hibernate 中对象的三种状态——临时状态、持久化状态和游离状态,以及 Session 缓存的工作原理。 1. Session 缓存及作用 Session 是 Hibernate 提供的一个接口,它充当了应用程序与数据库之间...
它通过将Java类映射到数据库表,实现了对象持久化,使得开发者可以像操作普通Java对象一样处理数据库中的数据,从而降低了对SQL的依赖。 **一、Hibernate概述** Hibernate是由Jboss公司开发的一个开放源代码的对象...
在Java的持久化框架中,Hibernate是一个非常流行的ORM(对象关系映射)工具,它极大地简化了数据库操作。本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_...
脱管态对象仍然包含了持久化到数据库的数据,但是Hibernate不再跟踪它的状态变化。 #### 三、脏数据(Dirty Data) **脏数据**是指在内存中被修改但尚未同步到数据库的数据。在Hibernate中,当一个持久态对象的...
- **Detached**: 对象曾是持久化的,但当前Session已被关闭,对象与数据库的连接断开。 ### 5. Hibernate的映射机制 Hibernate通过XML或注解方式实现对象与数据库表的映射,主要包括以下部分: - **实体类(Entity...
- **二级缓存管理**:二级缓存管理涉及选择使用缓存的持久化类,设置并发访问策略,以及选择合适的缓存适配器和数据过期策略。在条件查询时,Hibernate 首先检查二级缓存,如果没有找到再查询数据库。 总结来说,...
“hibernate-符合Java习惯的关系数据库持久化”这一标题明确指出了我们要探讨的主题——Hibernate,这是一个非常流行的Java ORM(对象关系映射)框架,它使得Java开发者能够按照面向对象的方式来操作数据库,而无需...
**一级缓存原理**:Session内部维护了一个对象缓存,保存了与数据库中的持久化对象对应的Java对象。当通过Session进行增删改查操作时,对象会自动放入一级缓存,而更新数据库的动作则可能延后到Session flush时执行...
SessionFactory是Hibernate的核心,它是线程安全的,负责管理持久化类的所有元数据,并且在应用启动时一次性创建。SessionFactoryBuilder则负责构建SessionFactory,而Configuration则用于配置Hibernate,读取...
Session是Hibernate的主要工作单元,它负责管理对象的生命周期,包括对象的持久化和缓存。 当我们在Hibernate中进行查询时,主要有以下几种方式: 1. **主键查询**:通过`get()`或`load()`方法根据主键获取对象。`...
Hibernate 提供了一种在Java应用程序中持久化对象的方式,它通过映射Java类到数据库表,使得开发者可以使用面向对象的方式来处理数据,而不是传统的SQL语句。这提高了代码的可读性和可维护性。 **2. 安装与配置** ...
总之,实现自己的Hibernate框架之Session方法,不仅需要熟悉数据库操作,还需要掌握面向对象编程、设计模式、数据缓存等多方面技能。这个过程有助于提升我们的编程能力,更好地理解和运用ORM技术。
《JAVA]_[清晰版]Hibernate 3.1-符合JAVA习惯的关系数据库持久化》这个压缩包文件主要聚焦于Java开发中的一个关键框架——Hibernate 3.1,它是一种高效、强大的对象关系映射(ORM)工具,使得Java开发者能够更方便地...
在IT行业中,数据库管理和持久化层的框架是关键部分,其中Hibernate是一个广泛使用的Java ORM(对象关系映射)工具。本篇文章将详细讲解如何配置Hibernate的配置文件,以实现数据表的自动生成,帮助开发者更高效地...
它通过将Java对象与数据库记录映射,实现了对象持久化,消除了传统的JDBC代码,简化了数据访问层的开发工作。Hibernate 3.0版本在前两版的基础上进行了诸多改进,包括性能优化、增强了对JPA的支持以及更多的查询选项...
综上所述,Session 接口在 Hibernate 中扮演着至关重要的角色,通过它不仅实现了对象的持久化,还提供了高效的一级缓存管理机制。理解 Session 的工作原理及其与对象生命周期之间的关系对于有效使用 Hibernate 至关...
1. **内存和磁盘缓存**:Ehcache不仅可以将数据存储在内存中,还可以在磁盘上持久化,防止数据丢失。 2. **分布式缓存**:通过添加Terracotta服务器,Ehcache可以实现分布式缓存,让多台服务器共享同一份缓存,提高...
在配置好Hibernate之后,可以通过以下步骤实现对象的持久化: 1. **定义Java实体类**:根据数据库表结构定义相应的Java实体类,每个实体类对应一个表。 2. **编写映射文件**:为每个实体类编写一个对应的`.hbm.xml`...