【Hibernate教程】事务、并发及缓存管理之扫盲篇

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
(4)D:表示Durability(持久性):指只要事务成功结束,对数据库的更新就必须永久保存下来,即使系统发生崩溃,重启数据库后,数据库还能恢复到事务成功结束时的状态。

二、悲观锁


悲观锁指的是当数据被外界(包括本系统当前的其他业务,以及来自外部系统的事务处理)修改时保持原始状态,因此,在整个数据处理过程中,将数据处于锁定状态。

一个典型的依赖数据库的悲观锁调用:

SELECT * FROM student WHERE NAME = ‘Lily’ FOR UPDATE;

这条SQL语句锁定了student表中所有符合检索条件(name=”Lily”)的记录。本次事务提交之前(事务提交时会释放事务过程中的锁),外界无法修改这些记录。Hibernate的悲观锁,也是基于数据库的锁机制实现的。

三、乐观锁


乐观锁的工作原理:读取出数据时,将此版本号一同读出,之后更新时,对版本号加一。此时,将提交数据的版本数据与数据库表对应的记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

在Hibernate中,主要由Hibernate提供的版本控制功能来实现乐观锁定。Hibernate为乐观锁提供了两种实现,分别为基于version的实现和基于timestamp的实现。对象关系映射文件中的version元素和timestamp元素,都具有版本控制功能。Version元素利用一个递增的整数来跟踪数据库表中记录的版本;而timestamp元素则用时间戳来跟踪数据库中表中记录的版本。

四、缓存


缓存是计算机领域中非常通用的概念,介于应用程序和永久性数据存储源之间。缓存的作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能。

1、缓存范围

(1)事务范围:缓存只能被当前事务访问。

(2)进程范围:缓存被进程内的所有事务共享。

(3)集群范围:在集群环境中,缓存被一个计算机或者多个计算机的进程共享。

2、Hibernate中提供了两级缓存

第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由Hibernate管理的,一般情况下无需进行干预;一级缓存释session所内置的,不能被卸载,也不能进行任何配置。

第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。二级缓存是一个可拔插的缓存插件,它是由SessionFactory负责管理。

3、缓存并发访问策略

当多个并发的事务同时访问持久化层中缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。因此可以设定以下四种类型的并发访问策略,每一种策略对应一种事务隔离级别。

(1)事务型策略:仅仅在受管理环境中适用。提供了Repeatable Read事务隔离级别。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为可以防止脏读和不可重复读这类的并发问题。

最后

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

新鲜出炉的蚂蚁金服面经,熬夜整理出来的答案,已有千人收藏

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!**

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值