Hibernate的缓存

持久层缓存的级别

  • 事务级别的缓存
  • 应用(进程)级别的缓存
  • 分布式级别的缓存

Hibernate的一级缓存
Hibernate中的缓存分成两级:一级缓存和二级缓存
Hibernate的一级缓存是内置的缓存,不能通过程序代码或者配置进行人为的取消,同时一级

缓存通过Session对象实现缓存,所以一级缓存也称为Session缓存

 

一级缓存的管理

使用evict()方法从缓存中移除缓存对象
使用clear()方法从缓存中清除所有对象
使用Session对象contains()判断是否在缓存中(true/false)、flush()和setReadOnly()方法

 

Hibernate的二级缓存

Hibernate的二级缓存由SessionFactory对象负责管理,是应用级别的缓存,可以缓存整个应

用的持久化对象
Hibernate的二级缓存又称SessionFactory缓存

 

Hibernate的二级缓存

 

缓存名称                   缓存类型                                对应的适配器类
Hashtable                 内存                                    org.hibernate.cache.HashtableCacheProvider
EHCache               内存,硬盘                               org.hibernate.cache.EhCacheProvider
OSCache               内存,硬盘                              org.hibernate.cache.OSCacheProvider
SwarmCahe     分布式(不支持分布式事务)               org.hibernate.cache.SwarmCacheProvider
JBoss Cache1.x 分布式(支持分布式事务)                 org.hibernate.cache.TreeCacheProvider
JBoss Cache2. 分布式(支持分布式事务)                   org.hibernate.cache.jbc2.JBossCacheRegionFactory

 

EHCache作为二级缓存

应用EHCache作为二级缓存

<hibernate-configuration>
	<session-factory>
		<property name="cache.provider_class">
			org.hibernate.cache.EhCacheProvider
		</property>
	</session-factory>
</hibernate-configuration>

 

编写ehcache.xml

<ehcache>
	<diskStore path="java.io.tmpdir" />
	<defaultCache maxElementsInMemory="10000" eternal="false"
		timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" />
		
	<cache name="com.rbh.examples.Product" maxElementsInMemory="2000" eternal="true"
		timeToIdleSeconds="0" timeToLiveSeconds="0" overflowToDisk="false" />
</ehcache>

 maxElementsInMemory 设置保存在内存中的缓存对象的最大数量
eternal 设置缓存中对象是否永远不过期,如果值为true,超过设置被忽略,缓存对象永不过期
timeToIdleSeconds 设置缓存中对象在它过期之前的最大空闲时间,单位为秒
timeToLiveSeconds 设置缓存中对象在它过期之前的最大生存时间,单位为秒
overflowToDisk 设置内存中的缓存对象达到maxElementsInMemory限制时,是否将缓存对象保存到硬盘中

 

二级缓存的策略

只读缓存(read-only)
读/写缓存(read-write)
不严格的读/写缓存(nonstrict-read-write)
事务缓存(transactional)

 

缓存组件对缓存策略的支持

 

在对应的持久化类中设定使用缓存的策略

添加

<cache usage="read-write" />

 list读取数据,读的数据可以帮助增加二级缓存,不会读取缓存中的数据.
iterator会查询二级缓存数据,如果读的数据不在二级缓存 n+1次查询记录

 

二级缓存 缓存集合对象

demo

ehcache.xml

<ehcache>
	<cache name="com.rbh.examples.Category" maxElementsInMemory="2000" eternal="true"
		timeToIdleSeconds="0" timeToLiveSeconds="0" overflowToDisk="false" />
	 
	<cache name="com.rbh.examples.Category.products" maxElementsInMemory="1000" eternal="true"
		timeToIdleSeconds="300" timeToLiveSeconds="600" overflowToDisk="false" />
</ehcache>

 Category.hbm.xml

<hibernate-mapping>
	<class name="com.rbh.examples.Category" table="CATEGORY">
	 <cache usage="read-write" />
	<set name="products" cascade="save-update" inverse="true">
		    <cache usage="read-write" />
			<key column="category_id"></key>
			<one-to-many class="com.rbh.examples.Product" />
		</set>
		</class>
</hibernate-mapping>

 

二级缓存的管理
SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evict(Category.class);
把二级缓存的Category的对象全部清除


SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evictCollection("com.rbh.examples.Category.products");
把Category对象的下的products集合所缓存的对象清除


SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evictEntity("com.rbh.examples.Category");
把Category对应的所有持久化对象的二级缓存都清除


SessionFactory sessionFactory=HibernateSessionFactoryUtil.getSessionFactory();
sessionFactory.evictEntity("com.rbh.examples.Category",new Integer(1));
把指定的持久化对象二级缓存清除

 

查询缓存(Query Cache)

<hibernate-configuration>
	<session-factory>
		<property name="cache.provider_class">
			org.hibernate.cache.EhCacheProvider
		</property>
		<property name="hibernate.cache.use_query_cache">true</property>
	</session-factory>
</hibernate-configuration>

 

Transaction tx = session.beginTransaction();
Query query = session.createQuery("from Category");
query.setCacheable(true);
List<Category> list = query.list();

 

memcached作为二级缓存

memcached是一款知名的,高性能的,分布式的内存对象缓存系统,主要用于在web应用中降低数据库的负载,它通过缓存数据库的查询结果,减少对数据库的访问次数,用以提高web应用的访问速度

Hibernate-memcached
Hibernate-memcached是CacheProvider接口的memcached实现

需要用到 memcached-2.x.jar,spy-2.4.jar,commons-codec-1.x.jar,hibernate-memcached-1.2.2.jar

使用memcached windows的服务器

添加Hibernate.hbm.xml

<property name="cache.provider_class">
	com.googlecode.hibernate.memcached.MemcachedCacheProvider 
</property>

 

 

由ip地址和子网掩码求网络号、主机号、广播地址(超详细) 1、用二进制数表示IP地址   在进行计算之前,我们首先要学会十进制的IP地址怎么转换为二进制的IP地址。   给出一个例子: 十进制:172.16.25.3 二进制:10101100.00010000.00011001.00000011 1、如果两台主机的网络号相同,我们就说它们是同一网段 2、主机号的意义 - 1)主机号部分全变成1,即为该网段的广播地址 - 2)主机号部分全变成0,即为该网段的网路地址(网络号) 3、如果主机号部分为x位,则该网络能容纳最大主机数为: 2的x次方-2。减2 阅读详情

相关推荐

Rust 与 C/C++:Rust 比 C/C++ 更好还是只是“技能问题”?

对于许多嵌入式系统开发人员而言,的崛起似乎掀起了一股不小的浪潮,特别是在相较于传统的语言,Rust的“内存安全”优势让人眼前一亮。然而,是否可以将Rust作为C/C++的替代品?或者说,Rust是否真的比C/C++更好,抑或它只是一个“技能问题”呢?在嵌入式开发的领域,我观察到,尽管Rust在一些高性能、内存安全敏感的场景中受到了广泛推崇,但它在实际应用中的普及度,特别是在嵌入式领域,依然有限。今天,我会从多个角度探讨这个问题,并且分享一些对于Rust、C/C++以及嵌入式系统开发的个人见解。

qq_63315166的博客 1300

spring cloud Eureka (配置项详细信息)

1、将一个普通的springboot应用注册到eureka或从eureka中获取服务列表,主要做了以下两件事: 在应用主类中配置了@EnableDiscoveryClient注解 在application.properties中使用eureka.client.serviceUrl.defaultZone参数指定服务注册中心的位置 通过@EnableDiscoveryClient来开启Discover

夏季版 4556

RK806S PMIC电源管理芯片调试

当点按PWRON按键时,rk806上电开始启动bootloader和uboot,在执行到此处时检测到是由于按键启动的,所以0x5d的值是0x80,0x74的值是0x80,在一般情况下,mode都默认是none的,所以mode值为11,因此就进入了我们的if判断,若是由于按键启动的,则直接调用rk8xx_shutdown函数关掉,进入这个函数会看到实际是通过i2c给0x72寄存器的BIT(0)写1,使其关机。当SoC在12V电源已经接入,且处于关机状态时,使用PWRON按键开机,0x74的值则为0x80。

Y1anoohh的博客 2545

The 'XXX' Cache is not alive (STATUS_SHUTDOWN)

今天在Linux中部署一个项目,原来的Tomcat已经有了项目在里面的,现在要往里面新增一个! 直接放上去后启动卡住了,有问题。后来就把我新上传上去的项目删除掉。没想到,重启Tomcat后发生了错误: 08-15 13:34:31 ERRORcmcc.gz.platform.log.thread.CmccThreadSysLoggingCollector.startup(SourceFile:

胡汉三 1万+

时间序列聚类在股票市场分析中的实践与优化

时间序列聚类是一种面向动态行为建模的无监督学习方法,其核心在于通过语义感知的距离度量(如DTW)捕捉价格形态的相位弹性与结构相似性,而非依赖静态数值或标签驱动。相比K-Means等传统算法,它能有效缓解金融时序中普遍存在的噪声敏感、对齐失效与形态失真问题,从而提升聚类结果的市场可解释性与策略鲁棒性。该技术已广泛应用于市场状态识别、行业行为分群、异常交易监测等场景,并成为构建可验证量化分析框架的关键预处理层。本文聚焦A股真实行情数据,详解从原始OHLCV到可聚类时间序列的完整链路,涵盖DTW距离计算、层次聚类

weixin_34220179的博客 830

利用docx4j与docx4j-ImportXHTML高效实现HTML到Word的自动化转换

本文详细介绍了如何利用docx4j与docx4j-ImportXHTML库,在Java环境中高效实现HTML到Word文档的自动化转换。内容涵盖从环境搭建、核心依赖配置,到集成Spring Boot REST API的完整实战流程,并深入解析了处理图片、CSS样式、字体设置以及使用模板保证样式统一等高级技巧与常见问题解决方案,帮助开发者构建稳定的文档自动化生成流水线。

cnn8visionary的博客 366

EhCache之初试

   blog迁移至 :http://www.micmiu.com   EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。   详情参见其官网站:http://ehcache.org/   具体文件下载网站:http://sourceforge.net/projects/ehcache/files...

Michael 168

计组头哥实验 实验三 MIPS寄存器实验

了解 MIPS 寄存器文件基本概念,进一步熟悉多路选择器、译码器、解复用器等 Logisim 组件的使用,并利用相关组件构建 MIPS 寄存器文件。

gdz0007的博客 1万+

为Hibernate配置文件加密的三套解决方案(二)

提要:本文将详细介绍使用[url=http://www.jasypt.org/]Jasypt[/url]的加密功能为Hibernate配置文件加密 首先来了解什么是Jasypt [quote]Jasypt这个Java类包为开发人员提供一种简单的方式来为项目增加加密功能,包括:密码Digest认证,文本和对象加密,集成hibernate,Spring Security(Acegi)来增强密码...

逗上帝发笑 340

【SpringBoot 3.x 第92节】Spring Modulith:构建模块化单体架构(基于 Spring Boot 3),一文带你搞透(超详细)!

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

**My Coding Family** 1000

基于matlab的LFM脉冲压缩仿真

传统雷达测距是通过发射点频脉冲串实现的,通过发射脉冲与回波的时延确定目标的距离。此类方法易于实现,对接收机的要求较低。一般要获取更好的距离分辨力,需要增加发射信号的带宽,对于点频脉冲信号即需要减小发射脉冲宽度;而为获取更大的探测距离,提升雷达威力,则需要发射更大占空比的脉冲串。由于点频信号的时宽带宽积约等于1,因此不能同时增加信号的时宽和带宽。若要保持距离分辨力,增大占空比就需要减少雷达的脉冲重复周期(PRT)。这样会减小雷达的无模糊探测距离,也会造成目标回波频繁被遮挡,损失雷达威力。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 1771

关于hibernate的缓存使用

  1.     关于hibernate缓存的问题:1.1.1.         基本的缓存原理Hibernate缓存分为二级,第一级存放于session中称为一级缓存,默认带有且不能卸载。 第二级是由sessionFactory控制的进程级缓存。是全局共享的缓存,凡是会调用二级缓存的查询方法 都会从中受益。只有经正确的配置后二级缓存才会发挥作用。同时在进行条件查询时必须使

woshichenxu的专栏 6万+

Arduino ESP32 Web服务器从microSD卡读取

Arduino ESP32 Web服务器从microSD卡读取 将网页内容放到SD卡中,当有客户端数据请求时,从SD卡读取信息进行发送,比起SPIFFS文件系统,更节约板上的硬件资源。 SD卡接线说明 ESP32----- SD D5(GPIO 5)-----CS D18(GPIO 18)-----SCK D19(GPIO 19)-----MISO D23()GPIO 23-----MOSI 文件放置 需要把文件放置到SD卡的根目录下。注意SD卡的格式FAT32格式。 实例代码 /*

perseverance51博客 1434

hibernate三级缓存

Hibernate中的缓存一共有三种,一级缓存、二级缓存、查询缓存。缓存除了使用Hibernate自带的缓存,还可以使用redis进行缓存,或是MongoDB进行缓存。 所使用的Demo: User.java文件  User.java hibernate.cfg.xml  hibernate.cfg.xml 其中: &lt;property name="show...

程序猿的十万个为什么 2373

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Hibernate之缓存详解

hibernate中提供了两级缓存,一级缓存是Session级别的缓存,它属于事务范围的缓存,该级缓存由hibernate管理,应用程序无需干预;二级缓存是SessionFactory级别的缓存,该级缓存可以进行配置和更改,并且可以动态加载和卸载,hibernate还为查询结果提供了一个查询缓存,它依赖于二级缓存; 一,缓存的概念 缓存是位于应用程序和永久性数据存储源之间用于临时存

张润东的博客 4705

WINCC7.3破解文件

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

使用Redis在Hibernate中进行缓存

Hibernate是Java编程语言的开放源代码,对象/关系映射框架。Hibernate的目标是帮助开发人员摆脱许多繁琐的手动数据处理任务。Hibernate能够在Java类和数据库表之间以及Java和SQL中的数据类型之间创建映射。 任何处理大量数据的非平凡应用程序都必须依靠缓存和其他技术来提高效率。缓存是一种通过使用缓冲区存储经常访问的数据来提高应用程序性能的策略。通过减少数据库请求的数量并将...

码农架构 2237

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

关于Hibernate的缓存

关于Hibernate的缓存 因为项目用到了Hibernate3.x版本,所以不又得重温了一下关于Hibernate的技巧和原理,其中主要是针对它的缓存进行那个了一番调研,于是想写点什么留下一点纪念。   (一)  Hibernate的缓存概念 Hibernate是干嘛的不用再解释了,它有两级缓存也是大家都知道的。简单来说一级缓存就是从你拿到Hibernate的session并且open

Ant Ren的专栏 1815

java之hibernate之hibernate缓存

这篇主要讲 hibernate缓存 1.缓存的作用是为了提高效率 2.Hibernate的开发效率比较高,但是执行效率相对较低。 3.Hibernate提供了缓存来提高效率。hibernate缓存分为:一级缓存,二级缓存,查询缓存。 4.一级缓存又称为 session缓存,是线程级别的缓存。 get 和 load 方法查询数据 首先检查session缓存中是否有该数据,如果有,...

weixin_30768661的博客 183

Hibernate 缓存

Hibernate缓存 后台取数据过程是: 先判断缓存里有没有数据,如果有从缓存里取数据让后返回,如果缓存里没有数据,则从数据库中取让后把数据存进缓存 使用缓存可以大幅度的提高查询速度和程序响应速度 1、hibernate一级缓存 2、hibernate二级缓存 3、hibernate查询缓存 ...

Java修炼者的博客 429

Hibernate缓存——查询缓存

Hibernate缓存——查询缓存 默认情况下关闭设置的缓存对HQL和QBC查询时无效,需要打开查询缓存。 查询缓存依赖于二级缓存。 1.设置          true 2.在打开了查询缓存之后,需要注意,调用query.list()操作之前,必须显式调用query.setCachable(true)来标识某个查询使用缓存。   pu

fkngl的博客 1293

java hibernate 缓存_java之hibernate之hibernate缓存

这篇主要讲 hibernate缓存1.缓存的作用是为了提高效率2.Hibernate的开发效率比较高,但是执行效率相对较低。3.Hibernate提供了缓存来提高效率。hibernate缓存分为:一级缓存,二级缓存,查询缓存。4.一级缓存又称为 session缓存,是线程级别的缓存。get 和 load 方法查询数据 首先检查session缓存中是否有该数据,如果有,从缓存中直接获取数据,如果没有...

weixin_39775896的博客 136

hibernate mysql缓存机制_理解hibernate缓存

简单理解Hibernate三种状态的概念及互相转化在Hibernate中有三种状态,对它的深入理解,才能更好的理解hibernate的运行机理,刚开始不太注意这些概念,后来发现它是重要的。对于理解hibernate,JVM和sql的关系有更好的理解。对于需要持久化的JAVA对象,在它的生命周期中有三种状态,而且互相转化。Hibernate三种状...文章文艺小青年2017-08-11800浏览量h...

weixin_33218578的博客 332

hibernate 缓存总结

缓存的分类:事务级别的缓存、应用程序级别的缓存、分布式缓存 hibernate 缓存: 分为三种缓存: 一级缓存\二级缓存\查询缓存(依赖于二级缓存) 一级缓存:session级别的缓存,依赖于session生命周期  不受我们管理,我们只能通过session.evict() 、session.clear() 清除一级缓存 save()、update()或 saveOrUpdate()

mydream1993的专栏 540

hibernate之二级缓存

一. 为什么需要缓存 拉高程序的性能 第一级别的缓存是Session级别的缓存,是属于事务范围的缓存,由Hibernate管理,一般无需进行干预。第二级别的缓存是SessionFactory级别的缓存,是属于进程范围的缓存。 二级缓存也分为了两种: 内置缓存:Hibernate自带的,不可卸载,通常在Hibernate的初始化阶段,Hibernate会把映射元数据和预定义的SQL语句放置到Sess...

Kobe Bryant 486

hibernate缓存介绍

hibernate缓存

lyf2233的博客 358

Hibernate缓存清除

<br />一、Hibernate一级缓存<br />(1)hibernate支持两个级别的缓存,默认只支持一级缓存;<br />(2)每个Session内部自带一个一级缓存;<br />(3)某个Session被关闭时,其对应的一级缓存自动清除;<br />(4)save、update、saveOrupdate、load、get、list、iterate、lock方法都会向缓存中存对象.<br />(5)可以从缓存中读数据的只有: get、load、iterate<br />(6)Query对象默认情况下

ksqqxq的专栏 843
上一篇: 写给孩子的信(转)
下一篇: Hibernate性能优化
fehly
博客等级 码龄18年 1粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值