`

hibernate缓存管理与性能调优

 
阅读更多

缓存管理

1.缓存概述
  缓存(cache)在java应用程序中是一组内存中的集合实例。它保存着永久性存储源(如硬盘上的文件或者数据库)中数据的备份,它的读写速度比读写硬盘的速度快。应用程序在运行时直接读写缓存中的数据,只在某些特定时刻安装缓存中的数据来同伴更新数据存储源。如果缓存中存放的数据量非常大,也会用硬盘作为缓存的物理介质。
   缓存的作用就是降低应用程序直接读写永久性数据存储源的频率,从而增强应用的运行性能。
缓存的实现不仅需要作为物理介质的硬件(内存),同时还需要用于管理缓存并发访问和过期等策略的软件。
2 缓存范围分类
缓存的范围决定了缓存的生命周期及其可以被谁访问。缓存的范围分为以下三类:
1)事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,当事务结束时,缓存也就结束生命周期。在此范围下,缓存的介质是内存。
2)进程范围:缓存被进程内的所有事务共享。这些事务有可能是并发访问缓存,因此必须对缓存采取必要的事务隔离机制。
3)集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。缓存的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据一致性。对于大多数应用来说,应该慎用集群范围的缓存,因为访问的速度并不一定比直接访问数据库数据的速度快很多。
3. 缓存的并发访问策略
在进程范围或集群范围的缓存,会出现并发问题。因此可以设置4中类型的并发访问策略,每一种策略对应一种事务隔离级别。事务的隔离级别越高,并发性能就越低。
1)事务型(Transactional)策略
2)读写型(Read-Write)策略
3)非严格读写型(Nonstrict-read-write)策略
4)只读型(Read-only)策略

4.Hibernate中的缓存
Hibernate中提供两级缓存,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。
第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围范围的缓存,这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。
Hibernate还为查询结果提供一个查询缓存,它依赖于二级缓存。


 

5.一级缓存的管理
Session级别的缓存由hibernate自动管理。当应用程序调用Session的CRUD方法及调用查询接口的list(),iterate()等方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把改对象加入到Session缓存中。如果在Session缓存中已经存在这个对象,就不需要再去数据库加载而是直接使用缓存中的这个对象,可以减少访问数据库的频率,提高程序的运行效率。当Hibernate清理缓存时(默认是提交事务的时候),Hibernate会根据缓存中对象的状态来同步数据库中的数据状态,在关闭Session时,会清空Session缓存中的所有对象。

 

一级缓存不能控制缓存的数量,所以要注意大批量操作数据时可能造成内存溢出;可以用
evict(Object obj):从缓存中清除指定的持久化对象。

clear():清空缓存中所有持久化对象。

 flush(): 进行清理缓存(此时缓存中的数据并不丢失)的操作,让缓存和数据库同步 执行一些列sql语句,但不提交事务。

 commit():先调用flush() 方法,然后提交事务. 则意味着提交事务意味着对数据库操作永久保存下来。

 

可以写一个for循环,Session可以批量插入上万条数据。如下面的代码:
             For(int i=0;i<10000;i++){
  Session.save(object);
}
这样写的代码会产生一个什么问题?会使一万个对象的缓存全部存在于内存中,这样做加大了内存的压力。所以应该定期清理session的缓存。
当做批量插入或批量更新时,必须通过经常调用Session的flush()以及稍后调用clear()来控制一级缓存的大小,这样内存才能保证足够的空间。

 

for(int i=1;i<=50;i++){
Department dept = new Department();
dept.setName("软件"+i);
session.save(dept);
for(int j=1;j<=100;j++){
Employee emp = new Employee();
emp.setName("张三"+j);
emp.setSalary(j);
    emp.setDept(dept
    session.save(emp);
    if(j%50==0){
    session.flush();
    session.clear();
    }
}
}
6.二级缓存的管理
二级缓存是SessionFactory级别的缓存,它的使用过程如下:
1)执行条件查询的时候,发出“select * from table_name where …”这样的SQL语句查询数据库,一次获得所有的数据对象。
2)把获得的所有数据对象根据ID放入到二级缓存中。
3)当Hibernate根据ID访问数据对象时,首先从Session缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;还没查到,再查询数据库,把结果按照ID放入到二级缓存。
4)删除、更新和增加数据的时候,同时会更新到二级缓存中。
Hibernate的二级缓存策略是针对ID查询的缓存策略,对于调节查询则毫无作用。为此,hibernate提高了单独针对条件查询的查询缓存。

适合存放到二级缓存中的数据有:
1)很少被修改的数据。
2)不是很重要的数据,允许出现偶尔的并发的数据。
3)很多系统模块都要用到
4)不是私有的数据,是共享的

什么样的数据不适合放在二级缓存中???
财务数据  安全性的数据 也就是不想让别人看到的数据和特别重要的数据

分享到:
评论

相关推荐

    Hibernate性能调优

    ### Hibernate性能调优知识点 #### 一、理解Hibernate与关联管理 在Hibernate中,关联管理是性能优化的关键因素之一。关联通常包括以下几种类型:单向`one-to-many`关联、双向`one-to-many`关联、`many-to-one`关联...

    Hibernate缓存,性能优化

    综上所述,Hibernate缓存机制是提升应用性能的重要手段,通过合理配置缓存策略、优化查询方式、管理数据库连接以及实施有效的监控和调优措施,可以显著提高Hibernate应用的运行效率和用户体验。然而,缓存的使用并非...

    hibernate 的开发注意项与性能调优

    ### Hibernate的开发注意项与性能调优 在长期的软件开发过程中,Hibernate作为一款流行的ORM(对象关系映射)框架,被广泛应用于Java项目中。然而,在实际的应用场景下,如何进行性能调优是一个非常重要的话题。...

    hibernate 调优

    Hibernate 性能调优涉及多个层面,包括数据库设计、查询语言优化、缓存管理等。合理配置和使用 Hibernate 可以显著提升应用程序的整体性能。开发人员应该根据具体应用场景灵活选择合适的策略和技术方案。

    hibernate 缓存策略

    **hibernate缓存策略详解** Hibernate作为Java领域中广泛使用的ORM框架,其在处理大量数据时,为了提高性能和减少数据库的访问压力,引入了缓存机制。本文将深入探讨Hibernate的缓存策略,包括一级缓存、二级缓存...

    hibernate5.1二级缓存包

    6. **性能调优**:根据实际应用需求和性能测试结果,调整缓存大小、过期策略等参数,以达到最佳性能。 这个"hibernate5.1二级缓存包"可能包含了相关的 JAR 包、配置示例或其他辅助文件,帮助开发者快速集成和配置 ...

    hibernate二级缓存包

    8. **性能监控**:Ehcache提供了一套完善的监控和统计功能,开发者可以通过监控界面查看缓存命中率、缓存大小等指标,以便进行性能调优。 综上所述,Hibernate二级缓存配合Ehcache使用,能够有效提升Java应用的性能...

    hibernate 二级缓存

    3. 性能调优:根据系统负载和硬件资源,调整缓存大小和并发级别,避免内存溢出。 4. 安全性:不要缓存敏感信息,因为缓存可能被多用户共享。 通过上述介绍,我们可以了解到Hibernate二级缓存对于提升系统性能的...

    项目中使用 hibernate-memcached 做二级缓存

    在深入使用Hibernate-Memcached时,我们还需要关注性能调优,如适当调整缓存大小、设置合理的过期时间、优化网络通信等,以达到最佳效果。 总的来说,结合Hibernate的二级缓存机制和Memcached的分布式缓存能力,...

    41_传智播客hibernate教程_hibernate二级缓存的扩充细节.rar

    6. **性能调优**:监控缓存命中率,根据实际负载调整缓存大小和策略,避免缓存击穿或雪崩现象。 通过本教程,你将学习到如何在实际项目中配置和优化Hibernate的二级缓存,以及如何解决与之相关的各种问题。这将有助...

    hibernate二级缓存

    Hibernate二级缓存是Java开发中使用Hibernate框架时提高性能的重要机制。它是一种持久化层缓存,用于存储从数据库中加载的对象,以便后续请求可以快速访问这些数据,而无需每次都直接查询数据库。在大型应用程序中,...

    Coherence企业级缓存

    本文将深入探讨Coherence的核心特性,包括其QuickStart和编程模型,四种缓存类型,数据管理模式,与Hibernate的集成,以及JMX管理和监控,最后简要提及性能调优。 一、特点 Coherence的主要特点在于其高度可扩展性...

    hibernate性能:性能、规模、风险 初评

    但对于大型复杂项目,特别是那些对性能有极高要求的应用(如电信行业的交易处理系统),Hibernate可能需要与其他技术结合使用,比如存储过程、分布式缓存等,才能达到最佳效果。 2. **性能瓶颈**:虽然Hibernate提供...

Global site tag (gtag.js) - Google Analytics