`

Hibernate之数据缓存

阅读更多

Hibernate数据缓存(cache)分为两个层次,从语义上分:

1,内部缓存(Session Level,也称一级缓存);

2,二级缓存(SessionFactory Level);

 

Hibernate中,缓存只有在一下情况下发生作用:

1,通过id[主键]加载数据时:其中包括session.load,及session.iterate等批量查询方法;

2,延迟加载:

 

内部缓存(session Level,一级缓存)

   内部缓存在HIbernate中称为一级缓存,属于应用事务级缓存。Session在内部维护了一个Map数据类型,此数据类型中保存了所以的与当前session想关联的数据对象,(sessionImpl.java中可以看出);这些Map数据结构维护了当前session中所有相关PO的状态;

   如果我们需要通过session加载某个数据对象,session首先规根据所要加载的数据类和id,在entitiesByKey中寻找是否有此数据的缓存实例,如果存在且判断状态为有效,则使用;同样,如果session从数据库中加载了数据,也会将其纳入Map结构的管理;

   内部缓存正常情况下由hibernate自己去维护,如果需要手动干预,则可以使用:

		//将某个特定对象从内部缓存中清除
		session.evict(object);
		//清空内部缓存
		session.clear();
 

二级缓存(SessionFactory Level)

   hibernate中,二级缓存涵盖了应用级缓存和分布式缓存领域;二级缓存将由从属本SessionFactory的所有Session实例共享,因此有时也可成为:SessionFactory Level Cache;Session在查询数据时,首先会在一级缓存内查找,如果为找到,则再去二级缓存寻找,如果有数据,则返回它;

   在使用二级缓存中要考虑两个问题:

 

   1,数据库是否与其他应用共享;

      这种情况下,不能使用二级缓存,但是我们可以对数据的共享情况进行细化,比如某个表本应用独占,那么也可以对此表引用二级缓存机制;

 

   2,应用是否需要部署到集群环境中;

      这种情况下,必须考虑是否需要引入分布式缓存机制,以及引入分布式缓存带来的实际性能变化;

 

如何正确使用二级缓存?

   对数据库中的所有数据都实施缓存机制,是最简单的办法;但是,面对一个数据量超大,使用超级频繁,且不能共享数据的情况下(比如移动的电话业务),如果对这样的表实施缓存机制,那么机器内存会迅速充满不能被重用的数据,系统性能急剧下降;因此在使用时,要考虑周全,方能“下手”!

   可以参考以下的条件,使用缓存机制:

  • 数据不会被第三方应用修改;
  • 数据大小在可接受的范围内;
  • 数据更新频率低;
  • 同一条数据可能被频繁的使用;
  • 非关键数据(关键数据,比如涉及到金钱的数据);

Hibernate本身为提供二级缓存的产品实现(直是提供了基于Hashtable的简单缓存以供调试),而是为众多的第三方缓存组建提供接口;

 

第三方缓存!

Hibernate提供了面向第三方缓存实现的接口,如:

  • EHCache
  • OSCache
  • JBoss Cache 1.x
  • JBoss Cache 2.x
  • Swarm Cache

EHCache是Hibernate默认的二级缓存实现,缺陷是无法做到分布式缓存,如果我们的系统需要在多态设备上部署,并共享同一个数据库(多机负载均衡),就要使用支持分布式的缓存(如jBoss Cache);

Swarm Cache和JBoss Cache均提供了分布式缓存的实现(Cache集群);

 

Swarm Cache提供的是Invaliadtion方式的分布式缓存,当集群中的某个节点更新了缓存中的数据,即通知集群中的其他节点将此数据移出,如果其他节点需要此数据时,重新从数据库中读取并放到缓存中;

JBoss Cache提供的是Repplication方式的缓存,如果集群中的某个节点的数据发生改变,此节点会将发送改变的数据的最新版本复制到集群中每个节点中去,以保持所有节点的状态一致;

 

分享到:
评论

相关推荐

    Hibernate + EhCache 实现数据缓存的处理

    本篇将详细探讨如何使用Hibernate ORM框架结合EhCache实现数据缓存的处理,从而提高系统的响应速度。 Hibernate是一个流行的Java持久化框架,它提供了一种便捷的方式来映射对象关系模型(ORM)到关系数据库。然而,...

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

    Hibernate 是一个流行的对象关系映射(ORM)框架,它提供了数据缓存机制以优化数据库访问性能。缓存机制分为一级缓存和二级缓存,两者都有助于减少对物理数据库的直接访问,从而提高应用程序的运行效率。 一级缓存...

    hibernate二级缓存实例

    在Java的持久化框架Hibernate中,二级缓存是提高数据访问效率的重要机制。它是一种全局共享的、跨会话的数据存储区域,旨在减少对数据库的直接访问,从而降低系统负载,提升性能。在这个"hibernate二级缓存实例"中,...

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

    **hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。...在实践中,合理配置和管理缓存,是每个专业Java开发人员必备的技能之一。

    Hibernate二级缓存

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

    hibernate 二级缓存详解

    使用`<cache usage="read-write">`配置,表示使用读写缓存策略,当实体被修改时,Hibernate会自动从缓存中移除相应数据。 Ehcache的配置通常在ehcache.xml文件中进行,如: ```xml maxElementsInMemory="500" ...

    Hibernate一级缓存、二级缓存以及查询缓存实例

    在Java的持久化框架Hibernate中,缓存机制是优化数据库操作性能的重要手段。本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始...

    hibernate二级缓存包

    Hibernate二级缓存是Java开发中使用Hibernate框架进行数据持久化时优化性能的一种重要技术。它在一级缓存(Session级别的缓存)的基础上,提供了一个全局的、跨会话的数据存储层,可以显著减少对数据库的访问,从而...

    hibernate二级缓存示例源码

    为了解决这个问题,Hibernate引入了二级缓存,它是SessionFactory级别的,能跨多个Session共享数据,提高了数据读取的效率。 ### 2. 二级缓存的工作原理 二级缓存将最近使用或频繁访问的数据存储在内存中,减少了...

    Hibernate一级缓存和二级缓存

    标题“Hibernate一级缓存和二级缓存”指的是Hibernate框架中的两种缓存机制,它们是提高数据访问性能的关键要素。一级缓存是Session级别的,而二级缓存是SessionFactory级别的,两者在数据库操作中起到了重要的作用...

    hibernate二级缓存java包下载

    二级缓存是 Hibernate 缓存策略的一部分,它在应用程序的多个会话之间共享数据,进一步优化了数据库访问效率。 二级缓存分为以下关键知识点: 1. **一级缓存与二级缓存的区别**: - 一级缓存:每个 Hibernate ...

    深入理解Hibernate缓存

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

    hibernate一级缓存

    在Java的持久化框架Hibernate中,一级缓存是其核心特性之一,它为提高数据库操作效率、减少对数据库的访问提供了重要支持。一级缓存,也称为session缓存,是每个Hibernate Session内部管理的一个内存结构。在本篇...

    Hibernate 二级缓存 总结整理

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

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

    本篇文章将深入探讨Hibernate的二级缓存机制,以及如何进行一级缓存与二级缓存的同步,同时还会介绍二级缓存的配置文件设置。 一级缓存是Hibernate默认提供的缓存,每个SessionFactory实例都有一个一级缓存。当对象...

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

    二级缓存是ORM框架(如Hibernate)中的一个重要特性,它可以在数据库和应用程序之间存储经常访问的数据,以减少对数据库的直接访问,从而提高性能。通常,一级缓存由Hibernate Session管理,而二级缓存则可以跨越多...

    hibernate二级缓存所需要的 jar包

    在Java的持久化框架Hibernate中,二级缓存是提高数据访问效率的重要机制。它能够将经常访问的数据存储在服务器内存中,减少对数据库的直接访问,从而提升系统性能。本篇将详细介绍Hibernate二级缓存的概念、作用以及...

    Hibernate二级缓存+分页功能

    当数据发生变化时,通过监听Hibernate事件或定时任务更新缓存,确保数据一致性。 总结,理解并熟练运用Hibernate的二级缓存和分页功能,能帮助我们构建高效、稳定的企业级应用。在具体实现时,还需要根据业务需求和...

    Spring集成的Hibernate配置二级缓存

    在Hibernate中,一级缓存是每个Session内部的缓存,它自动管理实体的状态,当一个实体被加载到Session后,该实体的状态就会被缓存。然而,一级缓存的范围仅限于单个Session,当Session关闭后,其中的数据就会丢失。...

Global site tag (gtag.js) - Google Analytics