Hibernate一级缓存和二级缓存综合

hibernate的一级缓存和二级缓存 hibernate的一级缓存和二级缓存,hibernate的一级缓存和二级缓存,hibernate的一级缓存和二级缓存,hibernate的一级缓存和二级缓存,hibernate的一级缓存和二级缓存 立即下载

1、Hibernate缓存概述

缓存是介于物理数据源与应用程序之间,是数据库数据在内存中的存放临时copy的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用的运行性能。Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询,如果在缓存中找到了需要的数据(我们把这称做“缓存命中"),则就直接把命中的数据作为结果加以利用,避免了建立数据库查询的性能损耗。

2:Hibernate缓存分类

一级缓存(session):内部缓存

事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,当事务结束时,缓存也就结束生命周期。
二级缓存(sessionFactory):

缓存被应用范围内的所有事务共享。 这些事务有可能是并发访问缓存,因此必须对缓存进行更新。缓存的生命周期依赖于应用的生命周期,应用结束时, 缓存也就结束了生命周期,二级缓存存在于应用范围。集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致性, 缓存中的数据通常采用对象的松散数据形式,二级缓存也存在与应用范围。

注意: 对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存,再加上集群范围还有数据同步的问题,所以应当慎用。多种范围的缓存处理过程持久化层可以提供多种范围的缓存。如果在事务范围的缓存中没有查到相应的数据,还可以到应用范围或集群范围的缓存内查询,如果还是没有查到,那么只有到数据库中查询了。
缓存应用的范围:修改少,数量在可以接受的范围内

使用二级缓存的原则:
◆数据不会被第三方修改
◆同一数据系统经常引用
◆数据大小在可接受范围之内
◆关键数据或不会被并发更新的数据

hibernate引入第三方的缓存组件EHCACHE,下面是具体的实现步骤:
修改hibernate.cfg.xml配置引入ehCache缓存
< hibernate-configuration >                                                    
 < session-factory >                                                                     < property   name ="hibernate.cache.provider_class" >                            net.sf.ehcache.hibernate.EhCacheProvider                                   </ property >                                                                              < property   name ="hibernate.cache.use_query_cache" >
true
</ property >                                          
</ session-factory >                                     
</ hibernate-configuration >     
 
在src根目录下加入ehcache.xml文件,具体内容如下:
< ehcache >
        < diskStore   path ="java.io.tmpdir" />
        < defaultCache
                maxElementsInMemory ="10000"
                eternal ="false"
                timeToIdleSeconds ="120"
                timeToLiveSeconds ="120"
                overflowToDisk ="true"
                />
</ ehcache >

在对应的映射文件中指定缓存同步策略

< cache   usage ="read-write" />
    < set   name ="group" >
      < cache   usage ="read-only" />
    </ set >
usage属性说明:
◆read-only:只读。对于不会发生改变的数据,可使用只读型缓存。
◆nonstrict-read-write:不严格可读写缓存。如果应用程序对并发访问下的数据同步要求不是很严格的话,而且数据更新操作频率较低。采用本项,可获得良好的性能。
◆read-write 对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题.
3、释放缓存:
一级缓存的释放
Session.evict(XXX) 将某个特定的对象从内部缓存中清除,上述的XXX 为对象的实例名。使用此方法有两种适用情形,需要及时释放对象占用的内存维持系统的稳定性是不希望当前Session继续运用此对象的状态变化来同步更新数据库。Session.clear()清除所有的一级缓存
二级缓存的释放
SessionFacatoyr.evict(XXX) 将某个特定的对象从内部缓存中清除,上述的XXX 为对象的实例名。使用此方法有两种适用情形,需要及时释放对象占用的内存维持系统的稳定性是不希望当前Session继续运用此对象的状态变化来同步更新数据库。SessionFactory.clear()清除所有的二级缓存 

4、查询缓存:

二级缓存策略的一般过程 :
Hibernate进行条件查询的时候,总是发出一条select * from XXX where …(XXX为 表名,类似的语句下文统称Select SQL)这样的SQL语句查询数据库,一次获得所有的符合条件的数据对象。把获得的所有数据对象根据ID放入到第二级缓存中。当Hibernate根据ID访问数据对象的时候,首先从内部缓存中查找,如果在内部缓存中查不到就配置二级缓存,从二级缓存中查;如果还查不到,再查询数据库,把结果按照ID放入到缓存。添加数据、删除、更新操作时,同时更新二级缓存。这就是Hibernate做批处理的时候效率不高的原因,原来是要维护二级缓存消耗大量时间的缘故。
条件查询的处理过程 :
第一次查找age>20的所有学生信息,然后纳入二级缓存。第二次我们的查询条件变了,查找age>15的所有学生信息,显然第一次查询的结果完全满足第二次查询的条件,但并不是满足条件的全部数据。这样的话,我们就要再做一次查询得到全部数据才行。如果我们执行的是相同的条件语句,Hibernate引入Query Cache的。
查询缓存策略的一般过程 :
完全相同的Select SQL重复执行。重复执行期间,Query Key对应的数据表不能有数据变动(比如添、删、改操作) 
启用Query Cache,我们需要在hibernate.cfg.xml中进行配置
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

< hibernate-configuration >
  < session-factory >
    < property   name ="hibernate.connection.url" > jdbc:mysql://localhost/manyToOne</ property >
    < property   name ="hibernate.connection.driver_class" > com.mysql.jdbc.Driver</ property >
    < property   name ="hibernate.connection.username" > root</ property >
    < property   name ="hibernate.connection.password" > hello</ property >
    < property   name ="hibernate.dialect" > org.hibernate.dialect.MySQLDialect</ property >
    < property   name ="hibernate.show_sql" > true</ property >
    < property   name ="hibernate.hbm2ddl.auto" > update</ property > <!--  发生修改才更新,没有变化不更新  -->
    < property   name ="hibernate.cache.query_cache_factory" > true</ property >
    < mapping   resource ="com/hibernate/Group.hbm.xml" />
    < mapping   resource ="com/hibernate/User.hbm.xml" />
  </ session-factory >
</ hibernate-configuration >
在查询执行之前,将Query.Cacheable设置为true,而且每次都应该这样
Query query=session.createQuery(hql).setInteger(0.15);                            query.setCacheable(true );   

test-hibernate:了解一级缓存的工作原理 了解 Hibernate 一级缓存 该项目由几个使用 Hibernate 和 H2 内存数据库的示例组成。 检查项目并运行每个示例。 示例 1 - 添加新实体。 示例 2 - 添加一个新实体并使用session.get(..)检索它。 示例 3 - 添加新实体并将其从一级缓存中删除。 示例 4 - 更新会话中已存在具有相同标识符的实体的非 Hibernate 受管实体。 示例 4a - 使用session.merge(..)更新非 Hibernate 托管实体。 示例 5 - 删除会话中已存在具有相同标识符的实体的非 Hibernate 受管实体。 示例 5a - 在删除非 Hibernate 受管实体之前首先使用session.merge(..) 。 示例 6 - 一个项目有 3 个用户。 示例 7 - 执行Example6 ,其中 1 个项目有 3 个用户,但使用 g 立即下载

相关推荐

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

NULL 博文链接:https://cdxs2.iteye.com/blog/1936594

细说Hibernate的缓存机制

2.1. 查询缓存:当使用 Session 对象执行查询操作时,如果一级缓存中没有数据,Hibernate 会在二级缓存中查找数据。2.2. 更新缓存:当使用 Session 对象执行更新操作时,Hibernate 会将更新后的数据存入一级缓存,并根据实体类的缓存策略更新二级缓存中的数据。2.3. 保存缓存:当使用 Session 对象执行保存操作时,Hibernate 会将新增的数据存入一级缓存,并根据实体类的缓存策略将数据插入到二级缓存。当 Session 对象被关闭时,一级缓存中的数据将被清除。

孤鹰的博客 2814

Fluent Meshing边界层设置保姆级教程:从y+理论到实战避坑,看完就会

本文详细解析了Fluent Meshing边界层设置的全过程,从y+理论基础到实战避坑技巧,帮助用户精准计算第一层高度并优化参数配置。通过案例演示和常见问题诊断,指导读者掌握边界层网格生成的核心技术,提升CFD模拟精度。特别针对不同湍流模型的y+要求提供具体参数建议。

weixin_30576827的博客 784

hibernate一级缓存与二级缓存

Hibernate之一级缓存和二级缓存 1:Hibernate的一级缓存:   1.1:使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率;(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据,如果有数据就不查询数据库,直接从缓存中获取数据);    1.2:Hibernate中的一级缓存,也叫做session的缓存,它可以在session...

点点的博客 953

MS51内部振荡器

MS51内部有两个RC振荡器,一个高速16MHz或24MHz(HIRC),可通过HIRC24(RCTRIM1.4)位进 行选择配置,以及一个低速10 kHz(LIRC)。它们都可被选择用作系统时钟。通过设置HIRCEN (CKEN.5)位使能HIRC,设备上电时LIRC被使能。用户可设置OSC[1:0] (CKSWT [2:1])为[0,0]选择HIRC 作为系统时钟,设置OSC[1:0](CKSWT [1:0])为[1,0]选择LIRC作为系统时钟。注意:MS51上电后HIRC 和 LIRC都被...

seraphseraphhill2008的博客 808

车载 ECU 中的 Safety Linux 详解

车载 ECU 中的 Safety Linux 详解

天赐好车的博客 308

Hibernate的一级缓存与二级缓存的优缺点及缓存的生命周期

如果项目既使用了 Hibernate 又需要 Redis,可以考虑将 **Redis** 作为二级缓存的存储后端。在这种情况下,Hibernate 二级缓存的管理和缓存数据的存取将交由 Redis 来完成,既享受了 Hibernate 集成的便利,又利用了 Redis 在分布式、高并发场景中的优势。

qq1004722157的博客 1205

rosbag分析传感器数据的时间同步情况方法

ROS传感器时间同步分析流程:通过rosbaginfo初步检查bag文件信息,使用rqt_bag可视化时间线分布,采用rostopicecho或Python脚本提取各传感器时间戳并计算时间差统计值(均值/最大差/标准差),最后分析接收与采样时间延迟。量化评估同步精度,识别固定偏移或随机抖动问题,确保多传感器数据对齐,为后续融合处理提供可靠数据基础。

start_up_go的博客 201

浅谈Spring中IOC和AOP是什么?

解释Spring中的IOC? IOC:Inversion of Control控制反转,也叫(Dependency Injection)依赖注入, dao接口的实现不再是业务逻辑层调用工厂类去获取,而是通过容器(spring)来自动的为我们的业务层设置Dao的实现类,这样整个过程就反过来,以前是我们业务层主动去获取dao,而现在是dao主动被设置到业务逻辑层中来了,这个也就是反转控制的由来。通过

snn1410的专栏 2万+

手把手完整实现STM32+LORA组网网关+机智云平台+手机APP应用———第一节- 一主多从的LORA本地组网通信-实现从机采集温湿度与主机显示数据

本教程为《手把手实现STM32+LORA组网网关+机智云平台+手机APP应用》第一节。实现一个主机,两个从机的LORA组网通信。两个从机采集温湿度数据并通过LORA传输数据到主机,然后主机接收到两个从机数据后进行数据显示,本节通过PC串口助手显示两个从机的数据。 下一节将其主机接收的数据通过WIFI网关(ESP8266)传到机智云平台与手机APP。 本文讲解一主多从的LORA本地组网通信,串口助手进行数据展示。使用硬件主要包括:STM32F103C8T6最小系统板(3个)、正点原子LORA模块ATK-L

嵌入式阿齐Archie 1万+

MounRiver Studio(MRS)使用技巧:添加头文件目录;增加代码分组

MounRiver Studio(MRS)使用技巧:添加头文件目录

cheng___yi的博客 1808

Hibernate一级缓存和二级缓存详解

一、一级缓存二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个 session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。 (2)二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果

徐刘根的博客 2万+

【网络教程】Ubuntu有线连接消失,无法联网怎么办!(亲测有效!)

文章目录问题描述解决方案 问题描述 今天打开Ubuntu,突然发现无法连接网络,并且打开设置,发现设置里面的网络已经没有了有线连接,只有VPN设置选项,如图 解决方案 按照下列的代码执行即可! # 关闭网路 service NetworkManager stop # 删除NetworkManager缓存文件 sudo rm /var/lib/NetworkManager/NetworkManager.state # 打开网络 service NetworkManager start 运行完

XiaoqiangClub的博客 1万+

hibernate二级缓存(一)一级缓存与二级缓存

hibernate二级缓存(一)一级缓存与二级缓存 1.hibernate一级缓存 hibernate的一级缓存是session级别的缓存,一级缓存hibernate默认启用且不能被卸载,一个事务内有效。 特点: 使用一级缓存的目的是为了减少对数据库的访问次数,从而提升hibernate的执行效率;(当执行一次查询操作的时候,执行第二次查询操作,先检查缓存中是否有数据,如果有数据就不查询数据库...

lan墨的博客 2919

基于Jeecgboot3.9.0的flowable7.2.0流程增加一个OA请假单功能例子(二)

基于Jeecgboot3.9.0的flowable7.2.0流程增加一个OA请假单功能例子(二)

宁波阿成的博客 198

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

浅谈Hibernate缓存机制:一级缓存、二级缓存

浅谈Hibernate缓存机制:一级缓存、二级缓存

VipMao的博客 7228

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Hibernate的一级和二级缓存

1. 管理session session对象的生命周期与本地线程绑定 thread 使用本地线程绑定,每次都从当前的线程提取session!!!     * 当前线程如果存在session对象,取出直接使用     * 当前线程如果不存在session对象,获取一个新的session对象和当前线程绑定 Session s1 = sf.getCurrentSession();

技术人生 6602

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Hibernate一级缓存和二级缓存的区别

一级缓存 &amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;nbsp;session级

zs1342084776的博客 4833

Hibernate和Mybatis一级缓存、二级缓存

Hibernate 简介 Hibernate是一个持久层框架,经常访问物理数据库。为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。 一级缓存 Hibernate一级缓存又称为“Session的缓存”。 Session内置不能被卸载,Session的...

迷途中的一片羽毛博客 1348

hibernate缓存:一级缓存和二级缓存

hibernate缓存:一级缓存和二级缓存 1.什么是缓存?  缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用程序的运行性能。Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询,如果在缓存中找到了需要的数据(我们把这称做“缓存命中"),则就直接把命中的数据作为结果加以...

莫等闲的博客 928

hibernate一级和二级缓存介绍

一级缓存Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存Hibernate一级缓存又称为“Session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消session缓在第一级缓存中,持久化类的每个实例都具有唯一的OID存。在缓存中的对象,具有持久性,session对象负责管理.一级缓存的优点是使...

dijiu8050的博客 2574

Hibernate的一级缓存Session和二级缓存SessionFactory

Hibernate的一级缓存是指Session,它是一块内存空间,用来存放相互管理的java对象,有了一级缓存,应用程序可以减少访问数据库的次数,提高了性能。在使用Hibernate查询对象的时候,首先会使用对象属性的OID值(对应表中的主键)在Hibernate的一级缓存进行查找,如果找到,则取出返回,不会再查询数据库,如果没有找到,再到数据库中进行查询操作。然后将查询结果存放到Session一级

qq_19925065的博客 1972
上一篇: Hibernate二级缓存详解
下一篇: hibernate缓存使用注意事项
北斗安心联
博客等级 码龄16年 6粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值