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方式的缓存,如果集群中的某个节点的数据发生改变,此节点会将发送改变的数据的最新版本复制到集群中每个节点中去,以保持所有节点的状态一致;

 

使用R语言整理GEO数据的简易教程 本教程介绍了使用R语言从GEO数据库下载数据并进行数据整理的基本步骤。根据实际研究问题,你可能需要进行更复杂的数据处理和分析。R语言作为一种强大的生物信息学工具,为GEO数据的整理、分析和可视化提供了丰富的功能和工具。希望这个教程能够帮助你入门GEO数据整理和R语言的应用。如果你在使用过程中遇到问题,或需要进一步的指导,请随时向我询问。祝你在GEO数据分析的旅程中取得成功! 阅读详情

相关推荐

win11系统ping另一台电脑上VMware虚拟机的IP

我是用了两台电脑,所以刚才遇到一个问题就是两台电脑的IP 在同一局域网内ping不通。于是就找了很多资料,经过坚强的绝望后终于解决了。 下开始解决问题: VMWare提供了三种工作模式:bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。 1. bridged(桥接模式)   在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立主机,它可以访问网内任何一台机器。在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚

qq_42817360的博客 3238

Hibernate总结(七)--之数据缓存

转载:http://blog.youkuaiyun.com/wjw0130/article/details/47615465 结合博主,自己测试代码 一级缓存解决在一次查询中,只与数据库交互一次 二级缓存解决一些常用的、公开的数据存放起来,方便使用,那查询缓存呢? 一、查询缓存的原理 一级缓存和二级缓存都是对象的缓存。对象缓存就是把该对象对应的数据库表中的所有的字段全部查询出来,

苍穹之上倚天长鸣的博客 407

【实战指南】EC-Engineer中ESI配置与PDO Mapping全流程解析

本文详细解析了EC-Engineer中ESI配置与PDO Mapping的全流程操作,包括环境准备、ESI文件导入技巧、在线配置细节及故障处理。特别强调了WinPcap驱动的兼容性问题和PDO Mapping的最佳实践,帮助工程师高效完成EtherCAT总线配置,适用于工业自动化领域的伺服控制与运动协同场景。

weixin_28730927的博客 397

第十四章 缓存的使用

缓存的使用 我们先来模拟一个缓存的机制 以查询学生为示例: public class Test { public static void main(String[] args) throws Exception { MyClassDao myClassDao = new MyClassDao(); StudentDao studentDao = new StudentDa...

wdpc2008的博客 208

STM32-TIM4-定时器中断

#include "project.h" #include "timer.h" //TIM4_Init(2000 ,72);//定时2ms /* 定时器中断的定时时间设定 定时器只需要配置时钟、TIM和NVIC即可 */ void TIM4_Init(u16 period, u16 prescaler) { NVIC_InitTypeDef NVIC_InitStructure; TIM_...

snaygo 6204

稳定性仿真(stb闭环增益仿真)

stb仿真主要是测试电路的稳定性,例如运放在闭环电路中的增益和相位裕度的值,从而判别电路是否正常工作。 以下是stb仿真的过程: (1)调用iprobe器件 从analogLib中调iprobe器件,通过器件中的箭头标识确定接入电路的方法,箭头起点端连运放的输出端,箭头的终点端连在反馈环路的作用端。iprobe器件连入电路后相当于理想导线。(iprobe器件连接在反馈回路上) (2)analyses设置 勾选stb和frequency,此处的频率范围设置在0.1~1GHz,Probe Instance/T

qq_36686804的博客 3万+

Hibernate的缓存机制/会话级缓存机制

Hibernate 的一级缓存机制的作用:1.如果 session 被查询,session 将先到缓存中查找是否有被查询的对象,找到则直接返回该对象,否则才查询数据库2.缓存中的对象如果状态发生改变,会被标记下来(即维护对象的状态),当执行 时会将改变同步到数据库中当调用 session.evict(Object obj) 时,会将对象 obj 从 session 缓存中清除掉。测试代码:......

liaowenxiong的博客 592

Sigrity Power Tree如何生成电源树操作指导

Sigrity Power Tree可以方便地生成电源树,仅需要网表文件就能将系统的电源树直观的显示出来,生成的电源树文件可以用Power DC,optimizePI进行直流和交流仿真,下面介绍如何生成电源树。Base on [Device_TYPE and VALUE]就是识别网表中器件的Device_TYPE作为power tree中的模型的名字。Allegro layout netlist file,就是从Allegro layout文件中输出的netlist第三方网表文件。如何生成电源树操作指导。

weixin_54787054的博客 1534

谈谈Hibernate的缓存

Hibernate支持两级缓存,一级缓存是Session级别的缓存,存储在Session对象中,可以减少数据库访问次数,提高性能。二、缓存机制不同:Session级别的缓存是基于强制依赖的,也就是说,如果某个对象在缓存中已经存在,并且某个其他对象依赖于该对象,那么在访问该其它对象时,必须先访问缓存中的对象,确保缓存中的对象始终是最新的。Session Factory级别的缓存是基于可选依赖的,也就是说,如果某个对象在缓存中已经存在,并且某个其它对象依赖于该对象,那么我们可以选择是否访问缓存中的对象。

AlphaFinance 440

RICHARDSON-LUCY 去卷积简介

Lucy去卷积1.泊松过程及联合概率分布2.极大似然估计参考文献 1.泊松过程及联合概率分布 首先假设相机接收光子生成图像的过程符合泊松分布。 因此,一次曝光过程中,某像素位置接收到iii个光子的概率p(i)p(i)p(i)为: p(i)=exp⁡(−λ)⋅λii!\qquad\qquad p(i)=\exp(-\lambda)\cdot\cfrac{\lambda^{i}}{i!}p(i)=exp(−λ)⋅i!λi​ 那么针对一张M∗NM*NM∗N的图像,所有像素的联合概率分布可以描述为: P(I)=∏e

驽马十驾,功在不舍;锲而不舍,金石可镂。 8694

【SpringBoot 3.x 第57节】Spring Boot 3 启动快得不讲武德?揭秘 Spring AOT 编译引擎背后的真相!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1760

辛星浅析Hibernate中的缓存机制

问:为什么需要缓存机制呢?         答:①Hibernate作为一个持久层框架,需要经常访问物理数据库。                ②为了提高程序性能,通常应该降低应用程序对物理数据源访问的次数。        问:Hibernate如何实现缓存?        答:①Hibernate中的缓存包括两大类:一级缓存和二级缓存。                ②一级缓存又称为S

辛星,前进的路上. 488

【BUG已解决】ImportError: cannot import name ‘OpenAI‘ from ‘openai‘ 解决方案

的核心是版本不匹配用确认当前版本如果是 0.x 版本 →升级到 1.x升级后代码语法要同步改为团队协作项目务必在中锁定版本号,避免"我这能跑,你那不能跑"的问题对接国产模型时,只需替换base_url参数,SDK 调用方式完全一致。

一键难忘的博客 1万+

Hibernate数据缓存

在Hibernate中,缓存将在以下情况中发挥作用:1.通过id[主键]加载数据的时候2.延迟加载 一级缓存:又称内部缓存,保存了与当前session相关联的数据对象,伴随Session实例的创建而创建,消亡而消亡。因此又称此缓存为Session level cache。一级缓存正常情况下又Hibernate自动维护,如果需要手动干预,可以通过以下方法完成。1.Sess

Johnny.Wang 579

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Hibernate数据缓存策略

Hibernate数据缓存策略 (一)hibernate数据缓存策略      缓存是数据库数据在内存中的临时容器,它包含了库表数据在内存中的拷贝,位于数据库与数据访问层之间。对于查询操作相当频繁的系统(论坛,新闻发布等),良好的缓存机制显得尤为重要。     ORM在进行数据读取时,首先在缓存中查询,避免了数据库调用的性能开销。 ORM的数据缓存应包含下面几个层次:

ning109314的专栏 3353

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

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

hibernate刷新数据时的缓存问题

今天碰见了一个BUG,两个系统同使用一个数据库,两个系统都采用的SSH框架,其中一个系统更新了数据库后,另一个系统得5分钟后才能取得更新的数据,肿么回事呢?仔细查了查,原来是hibernate缓存的问题,众所周知,hibernate是采取二级缓存的策略,第一是session级别的缓存,二是sessionfactory级别的缓存,并且默认二级缓存是打开的。(使用缓存需设置配置hibernate.cac

zxlqaz的博客 1349

Hibernate脏数据与数据缓存

[size=medium]Hibernate脏数据检查 何谓脏数据(Dirty Data)? 这里的"脏"可能有些误解,脏数据并不是说非废弃或者无用的数据,而是指一个数据对象所携带的信息发生了改变之后的状态. 事务提交时,HIbernate会对Session中的PO进行检测,判断那些发生了变化,并装发生变化的数据更新到数据库中. 脏数据的检查一般策略大致有下面两种: 数据对象监控...

hpjianhua的专栏 328

Hibernate缓存以及哪些操作会向缓存中读取和存放数据

Hibernate缓存 Hibernate有两级缓存,分别是一级缓存和二级缓存。一级缓存也叫Session级缓存,默认情况下就可以用,无需配置。一级缓存生命周期由Session对象决定,Session对象关闭,一级缓存也就消失。二级缓存也叫SessionFactory级缓存,需要配置后才能使用。二级缓存的生命周期比一级缓存的生命周期长,由SessionFactory对象决定,SessionFact...

lgxzzz的博客 417

Hibernate 脏数据检查机制与数据缓存

一. 脏数据检查机制 脏数据:   脏数据并非废弃或者无用的数据,而是指一个数据对象所携带的信息发生了改变之后的状态.            如果我们从数据库中读取一个对象,事务提交时 Hibernate会对session 中的PO进行检测,判断哪些发生了变化,并将发生变化的数据更新到数据库中.          Hibernate如何判断一个数据对象是否发生了改变,或者说 Hiberna

330553352的专栏 1708

【Hibernate】---- 数据缓存

【概述】     对于ORM实现而言,缓存显得尤为重要,它是持久层性能提升的关键。相对JDBC数据存取,ORM存取往往需要更加复杂的机制,以实现内部状态的管理、OR关系的映射等。     这些额外的开销使得ORM数据访问效率相对较低。如何弥补这里产生的性能差距?数据缓存是其中一个关键策略。     【原理】     ORM在进行数据读取时,会根据其缓存管理策略,首先在缓存中查询,如

My Devil's Cry 752

hibernate mysql 缓存_[转载]使用Hibernate实时读取数据库,不读缓存

由于读取数据的时候,Hibernate将第一次读取的内容放到了缓存中,若此时有别的应用修改了数据库中的数据,程序再次读取的时候,内容是从缓存中直接获取,无法反映数据库中的最新状况。因此,可以设置读取数据的模式,不用读取缓存,从数据库中直接读取,方法如下:public List queryObjectsByHQL(String hql,boolean queryFromCache) throws H...

weixin_32578799的博客 458
上一篇: 认识数据缓存
下一篇: Hibernate之缓存同步策略
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值