Hibernate缓存概述

1、Hibernate缓存概述 缓存是介于物理数据源与应用程序之间,是数据库数据在内存中的存放临时copy的容器, 其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用的运行性能。 Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询, 如果在缓存中找到了需要的数据(我们把这称做“缓存命中"),则就直接把命中的数据作为结果加以利用, 避免了建立数据库查询的性能损耗。 2:Hibernate缓存分类 一级缓存(session):内部缓存 事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期, 当事务结束时,缓存也就结束生命周期。 二级缓存(sessionFactory):缓存被应用范围内的所有事务共享。 这些事务有可能是并发访问缓存,因此必须对缓存进行更新。 缓存的生命周期依赖于应用的生命周期,应用结束时, 缓存也就结束了生命周期,二级缓存存在于应用范围。 集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。 缓存中的数据被复制到集群环境中的每个进程节点, 进程间通过远程通信来保证缓存中的数据的一致性, 缓存中的数据通常采用对象的松散数据形式,二级缓存也存在与应用范围。 注意:对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存, 再加上集群范围还有数据同步的问题,所以应当慎用。 多种范围的缓存处理过程 持久化层可以提供多种范围的缓存。如果在事务范围的缓存中没有查到相应的数据, 还可以到应用范围或集群范围的缓存内查询,如果还是没有查到,那么只有到数据库中查询了。 缓存应用的范围: 修改少,数量在可以接受的范围内 5、使用二级缓存的原则: 数据不会被第三方修改 同一数据系统经常引用 数据大小在可接受范围之内 关键数据或不会被并发更新的数据 5、hibernate引入第三方的缓存组件EHCACHE,下面是具体的实现步骤: 修改hibernate.cfg.xml配置引入ehCache缓存 <hibernate-configuration><session-factory><property name="hibernate.cache.provider_class"> net.sf.ehcache.hibernate.EhCacheProvider </property><!--query也支持缓存--><property name="hibernate.cache.use_query_cache">true</property></session-factory></hibernate-configuration> 在src根目录下加入ehcache.xml文件,具体内容如下: <ehcache xsi="http://www.w3.org/2001/XMLSchema-instance" nonamespaceschemalocation="ehcache.xsd"><defaultcache maxelementsinmemory="10000" eternal="false" timetoidleseconds="120" timetoliveseconds="120" overflowtodisk="true"></defaultcache></ehcache> 在映射文件中指定缓存同步策略 <class name="com.tenly.bean.Student"><cache usage="read-write"><set name="classroom"><cache usage="read-only"></cache></set></cache></class> usage属性说明: read-only:只读。对于不会发生改变的数据,可使用只读型缓存。 nonstrict-read-write:不严格可读写缓存。如果应用程序对并发访问下的数据同步要求不是很严格的话, 而且数据更新操作频率较低。采用本项,可获得良好的性能。 read-write 对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题. transactional(事物型) 在Hibernate中,事务型缓存必须运行在JTA事务环境中。 在测试query时,说明其将用二级缓存 query.setCacheable(true); 3、释放缓存: 一级缓存的释放 Session.evict(XXX) 将某个特定的对象从内部缓存中清除,上述的XXX 为对象的实例名。使用此方法有两种适用情形, 需要及时释放对象占用的内存维持系统的稳定性 是不希望当前Session继续运用此对象的状态变化来同步更新数据库。 Session.clear()清除所有的一级缓存 二级缓存的释放 SessionFacatoyr.evict(XXX) 将某个特定的对象从内部缓存中清除,上述的XXX 为对象的实例名。使用此方法有两种适用情形, 需要及时释放对象占用的内存维持系统的稳定性 是不希望当前Session继续运用此对象的状态变化来同步更新数据库。 SessionFactory.clear()清除所有的二级缓存 6、查询缓存: 二级缓存策略的一般过程: 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中进行配置,参考配置如下(只列出核心配置项): <hibernate-configuration><session-factory><property name="hibernate.cache.user_query_cache">true</property></session-factory></hibernate-configuration> 在查询执行之前,将Query.Cacheable设置为true,而且每次都应该这样。比如: Query query=session.createQuery(hql).setInteger(0.15); query.setCacheable(true);
CMOS sensor 基础 NA 阅读详情

相关推荐

Flutter 直接调用so动态库,或调用C/C++源文件内函数

我把 .so 文件尝试放过好几个目录/lib/,最终都会报这个错误,现在才知道库文件需要放在你根本想象不到的地方!!!尝试了一些方法还是不行后我放弃了 ffi,想着用 Flutter 的 MethodChannel 桥接 android/ios 原生,再让原生去调 native 层。一顿操作把Android端的搞定了,当然中间涉及到 Kotlin和C++ 层的数据类型映射的痛苦,而且业务函数也不像一个 helloworld 那么简单,别提有多痛苦了。

开发以大橘为重 8349

Hibernate 缓存概述

一、Hibernate缓存概述Hibernate中提供两个级别的缓存,一级缓存和二级缓存。1.一级缓存是Session级别的缓存,它属于事物范围的缓存,一级缓存有hibernate进行管理。2.二级缓存是sessionFactory级别的缓存,它属于进程范围的缓存,二级缓存又可分为”内置缓存”和”外置缓存”,内置缓存:是hibernate在创建sessionFactory时会加载.hbn.xml文件

糖糖糖糖糖先森 1078

Redash离线环境部署2020.1(centos+windows)

背景 Redash是一款开源的BI系统,核心功能是添加数据源,然后进行数据的可视化展示。一般会拿出来同Supervisor和Metabase进行选型比较,这里对三者的选型不做细致分析。而是给出在Redash开发环境部署踩过的坑,很多坑是自己琢磨出来的,网上几乎找不到更新的资料。适用于没怎么用过linux,也不怎么熟悉python的,用的是最新(master)的redash的代码(上一个发布版本...

Jone_wan的专栏 2136

hibernate的缓存概述:

hibernate的缓存概述:       hibernate 一级缓存,即session缓存也叫事务级别的缓存;       hibernate 二级缓存,即sessionFactory也叫应用级别的缓存;       hibernate 三级缓存,即查询缓存。 一级缓存的生命周期和session的生命周期保持一致,hibernate默认就启用一级缓存,可以通过session.clra

wnagchenxing的博客 363

基于STM32的智能水温控制系统设计

智能水温控制系统广泛应用于家庭、工业、农业等多个场景,尤其在热水器、恒温泳池和地暖系统中,通过实时监测和调节水温,提高设备的效率和用户的舒适度。本文基于STM32微控制器设计了一个智能水温控制系统,能够实时监测水温、用户设置温度,并根据需要控制加热器或冷却装置,确保水温维持在设定范围内。系统能够根据用户设定自动控制加热和冷却设备,确保水温维持在舒适的范围内,并通过OLED屏实时显示水温信息。在生成的项目基础上,编写水温监测、目标温度设定、加热器和冷却装置控制、OLED数据显示以及超温报警的代码。

2401_88410555的博客 2473

开发者的避坑指南:在Apple Silicon Mac上构建RocketMQ Python客户端的完整心路历程

本文详细记录了在Apple Silicon Mac上构建RocketMQ Python客户端的完整过程,重点解决了架构兼容性问题。通过源码编译rocketmq-client-cpp库,修复构建脚本和CMake配置,最终成功在M2芯片MacBook Pro上部署RocketMQ Python客户端,为开发者提供了实用的避坑指南。

Pepper的专栏 696

hibernate缓存概述

hibernate分为一级缓存即session缓存也叫事务级别的缓存以及二级缓存sessionFactory即应用级别的缓存,还有查询缓存即三级缓存. 一级缓存的生命周期和session的生命周期保持一致(hibernate默认就启用了一级缓存),不能将其关闭,可以通过session.clear()和session.evict(object)来管理一级缓存。其中get,load,iterate都

PanYangxu的博客 476

为什么BGA焊点总在四个角先坏?一次热-振耦合仿真给你讲明白

本文通过Ansys Workbench进行热-振耦合仿真,深入分析了BGA焊点在四个角点先失效的机理。研究发现,角点焊点由于CTE失配、振动载荷放大及几何应力集中等因素,承受的等效塑性应变和动态应力显著高于中心区域,导致其疲劳寿命大幅降低。仿真数据揭示了角点焊点的应力分布和蠕变特性,为电子封装可靠性设计提供了重要依据。

weixin_42535461的博客 439

Hibernate的二级缓存概述

SessionFactory是JVM进程级别的缓存。 Session是事务线程级别的缓存。 Hibernate还可以集成其他第三方缓存,以在Session之外缓存数据。 在Hibernate应用中配置二级缓存: 集成第三方缓存的org.hibernate.cache.spi.RegionFactory接口声明第三方缓存的hibernate.cache.region.fact

成长的足迹 623

【智能车Code review】——小S与中S道路判断

基本思想: 找到中线的左拐点和右拐点,并且计算出两点之间的空间距离。通过限制空间距离,分为中S和小S。 注意这种情况:当20行以下的中线斜率比较陡,此时可以通过人为限制设定,将第0行的中线设置为拐点。 if (flag_centre_right_point == 0 && flag_centre_left_point == 1 && parameterB >= 0.5 && centre_left_point[0] >= 33) { .

hanhan的博客 6102

YOLO项目从零开始:超详细运行教程(图文保姆级教学)

至此,我们已经完整跑通了YOLO项目的安装与启动流程,无论你是零基础小白还是刚入门的AI新兵,只要按部就班操作,也能轻松实现目标检测项目的落地。

一键难忘的博客 4797

hibernate 缓存应用概述

Hibernate是一个ORM框架,由于现在多数web应用工作在并发环境中,为了减少应用程序对数据服务器的频繁访问,减少对数据库服务器的形成高负荷。通常需要在web应用中使用缓存机制。这种情况下,Hibernate缓存机制正是为此而生。主要支持一级缓存、二级缓存、查询缓存。 一,一级缓存 (1)一级缓存,也叫做session级缓存或事务级缓存,它的生命周期和session保持一致,对同个ses

lkx94的专栏 715

《UDS协议从入门到精通》系列——图解0x34:请求下载

上传下载类服务之0x34-请求下载,图解请求+响应格式,直观易懂,快速上手!!

车载系统攻城狮 4924

【转】Hibernate缓存概述

http://developer.51cto.com  2009-06-29 08:48  佚名  163博客  我要评论(0) 摘要:本文简单介绍Hibernate缓存。Hibernate缓存是介于物理数据源与应用程序之间,是数据库数据在内存中的存放临时copy的容器,其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用的运行性能。 标签:Hibernate缓存

中国资深步行专家 优快云BLog 547

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

hibernate笔记04 hibernate一级缓存概述

---Hibernate缓存 1.Hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式 2.hibernate缓存特点:    第一类  hibernate的一级缓存    (1)hibernate的一级缓存默认打开     (2)hibernate的一级缓存使用范围是session范围,从session创建到session关闭范围    

Astarte的博客 529

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Hibernate Session缓存概述

Hibernate还是比较常用的,于是我研究了一下Hibernate Session缓存,在这里拿出来和大家分享一下,希望对大家有用。 java对象的属性(通常是一些集合类型的属性 )占用的内存空间。如果对象的占用的内存很大就称为重量级的对象。如果对象的内存小就称为轻量级的对象。 Hibernate Session缓存被称为Hibernate的第一级缓存。SessionFactory的

smoonb的专栏 276

Hibernate缓存(一)缓存概述

  Hibernate缓存机制对Hibernate的性能发挥一直处于一个极其重要的作用,它是持久层性能提升的关键。            Hibernate缓存介于Hibernate应用和数据库之间,缓存中存放了数据库数据的拷贝。其作用是减少访问数据库的频率,从而提高应用的运行性能。 Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询,如果在缓存中找到了需要的数据(我们...

weixin_34163741的博客 82

hibernate的一级缓存概述与执行过程的演示

hibernate自带一级缓存特性,那么什么是一级缓存哪。 就拿更新操作而言,下面是示例代码。 //修改操作 @Test public void testUpdate() { //加载配置文件 Configuration cfg = new Configuration(); cfg.configure();//开始布局 //获取sessionFactory对象 Sess...

sofency'Blog 262
上一篇: 你真的明白什么是可伸缩性吗?
下一篇: Hibernate中 一 二级缓存及查询缓存的学习总结
wangbin83_gmail_com
博客等级 码龄18年 0粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值