00:00
就是刚才啊自动填充做到了下面啊MP咱做乐观锁,但乐观锁首先给大家先来回顾一下什么叫乐观锁,包括乐观所它在什么地方我们可以用到啊,其实在现实生活中很多地方都用到了乐观锁。啊,那我来解释一下啊这个词。我小的位置,它叫乐观锁。首先啊,第一个各位要明确啊,乐观所是个什么东西呢?第一个乐观所不是一个问题,它是什么?针对一种特定问题的一种解决方案,用这种锁的方式,它能够解决就是某些问题,这叫乐观锁,这里明确啊,它是为了解决问题而出现的这么一种东西,叫做乐观锁。这是第一个,那它来解决什么问题,给大家我来写一下啊,这边有个词,这个词不知各位是否听过啊,我这里写一下,它主要用来解决这个问题,叫做这个。
01:02
啊,对,我的描述啊,不是说只能这个问题,还有别的问题,这问题叫做丢失更新问题。啊,给大家啊,标到这个位置,那什么叫丢失更新,我来说一下啊,这份知识呢,应该是我们在Java基础和web之间学过的,买S阶段应该当时讲过一个东西。因为之前我因为我是讲过基础的啊,讲过web,讲过框架,讲过项目的,当时我记得啊,在这阶段中呢,我们在买SL阶段,各位应该学一个东西叫这个事物。事物这个东西不是各位是否印象啊,什么叫事物呢?说的简单点,事物就是逻辑上一组操作要么都成功,一个失败是不是都失败,但事物中咱学个东西啊,就是我写一下,如果说咱们不考虑事物的这个叫。隔离性。它会就是产生几类毒的问题。啊,就是产生几类读的问题,那有哪些读的问题,我说各位是否记得啊,这里边啊,我来快速重复一遍啊要各位记住有哪些读呢?第一个读我们可以叫这个。
02:12
当独。第二个读它叫这个不可重复读。还有一个堵叫虚或者幻堵啊,一个意思啊,就是不同书里边不同的说法,你可以叫虚堵或者叫堵。写一下啊,这叫换堵。是它这是我们不考虑事物隔离性会产生的三个问题,就是咱说的这个脏毒不可重复读,虚毒啊,或者换毒啊,这各位要能给他想想出来啊,如果你这个都不记得的话,那你把买so那个知识好好去看一看啊,因为这个虽然说面试中被问的几率不是很大了,但是属于一个基础知识啊,这是读的问题。但你明确啊,这是叫读的问题,而咱除了读的问题之外,还有一类问题叫做写的问题,就你不考虑隔离性,还有一个写的问题,那写的问题是什么?就叫这个丢失更新问题,这叫写的问西啊,所以咱们乐观所就是为了解决丢失更新出现的这么一个东西,或者你在write中在什么地方,就是它针对的都是这个问题而出现的啊,这叫乐观锁,那什么叫丢失更新,给大家来解释一下啊。
03:25
首先第一个你要明确咱在不考虑事物隔离性这个前提条件下,什么叫不考虑隔离性,也就是说你现在只有在并发情况下这种问题才出现,假如现在只有你一个人操作,这些问题都不存在,只有在并发。什么叫并发呢?就是至少有两人或者两个以上这个人对通交记录做一些操作,那各位成立问题在并发情况下会产生啊,那我解释一下什么叫丢失更新。小D位置啊。在这里叫丢失更新,咱通过它把乐观所给大家再详细解释一下啊,那这个丢失更新咱举个例子啊,比如我现在有这么一条记录。
04:09
啊,有条记录,假如说记录中啊,有这么几个值啊,随便写一个值,比如里边有一个ID,假ID是这个一。这是ID啊,然后除了ID之外,假如现在这是一个人的一个工资条。比如他的工资就是每月是这个。500块钱的工资啊,包括可能还有其他信息,这是我们一条记录,就是他这个I地址,还有这个人这个工资。啊,就是咱说那个money啊,工资咱就以它为例啊,那咱说什么叫丢失更新呢?假如我现在啊,在这个过程中,咱们有两个人都想去改这个人的工资啊,比如说这里边两人比方一个叫Lucy。比如说一个叫Mary啊,假如现在Lucy和Mary都想去改这个工资,这是我们的这么一个场景啊,那这过程中就能很好说出什么叫定时更新啊,包括引出咱的乐观所那比如现在啊,按照咱们操作过程中有一点。
05:10
因为大家之前都学过事务,在事务操作中,首先咱是不是要开启这个事务啊,比如现在Lucy和Mary都去改这个公司,他们首先是不是都需要先开启事务啊,这一步肯定是必须的,需要先开启事务,然后开启事务之后,假如现在啊Lucy呢,他去改工资了,他就是啊把这个人的工资,比如说由这个500块钱。啊有500,比如说改成这个就是呃8000。比如这是Lucy改的,那比如现在这个麦瑞也做了修改,他把这种工资,比如说由这个500块钱。比如改成这个200啊,就举个例子啊,比如改成200,那现在两人都需要改工资,当然各位注意啊,在咱的事务操作中,事务最终是不是要提交我。
06:05
就是最终他们肯定要提交事物,但你注意啊,现在有两个人,一个叫Lucy Mary,两人的事物是不是都需要提交?而在提交的时候,第一点两个人不可能同时提交吧?因为表中数据你要改的话,是不是肯定有先后顺序?就算你是在并发,他们改数据是不是也会有先后顺序?所以这里边啊,肯定有一个先提交,有个后提交,那就比如说在过程中Lucy他这数据先提交了。就是他啊,首先提交了15,那他一调是我发生了修改表中的这个工资就不是500了,是不是就变成了Lucy改这个8000了。啊,他就变成了8000,然后这个比如变完8000之后,陆毅挺高兴,他就出去玩了啊,所以改成了8000,但是比如现在啊,迈瑞他就是之后。又提交了15,那就有问题了。
07:01
本来这个Lucy把500块钱改成是8000了,但现在你发现啊,Mary他又做了修改,那现在这里面的工资就不是8000了,改成是不是就变成200?这里边有问题了,比如有一天Lucy再回来看,他就发现问题了,我的工资明明改成了8000,最后怎么变成200,所以这个过程叫什么?就叫丢失更新,也就是说啊,你多个人同时去改同一条记录,那这过程中谁最后提交会把之前提交的数据给他进行覆盖,就是你这里边麦会覆盖路费数据,假如再有人提交会把麦数据再覆盖,这个过程肯定是不对的,因为他们改的都是500数据。啊,这过程就叫丢失更新,我写一下啊。就是多个人同时去修改同一条记录。啊,同一条记录,那这个时候最后提交的这个会把之前的提交的数据给的就是覆盖掉。
08:07
啊,这个过程就叫做丢失更新,所以大家啊,把这过程能给他讲清楚啊,你给他好好去看一看啊,然后这个过程其实如果说啊,我们正常操作应该怎么样呢?就是你这里边Lucy先把工资改成8000,然后这个麦拿着8000,他把8000改成200,而不是说两人都去改500,就一个先提交一个在第二个提交,而两人不可能同时去改一条求据,就算你改一条数据,只能有一个人成功。啊,这一过程就叫丢失更新的这么一个问题,所以给大家做了一个描述。那这个问题啊,咱们就是抛出来之后,这些问题该怎么解决呢?下面说一下它的解决方案。啊,给大家写这个位置啊。就是它的解决方案,他的方案呢,其实有多种方式,咱比较常见的有两种方式。
09:03
那两种方式,一种叫做这个东西叫做悲观锁,还一个叫乐观锁啊,就是这个两种方式,那这两种方式什么意思给大家啊,我都来解释一下啊,A关锁咱一般是不用的啊,但是我也说明。什么叫悲观?强调啊,比如说现在悲观锁的特点就是我Lucy在操作数据的时候,别人都不能操作,只有等我Lucy操作完成之后,别人才可以操作,这叫悲观锁。它就好一个词,不是各位是否听过啊,就这个操作。叫做串行操作。啊,串行操作就是只能一个人同时操作,不能有两人同时进,同时进行,一个人操作手,别人只能等待。啊,那我举个例子啊,这例子应该不是特别恰当,但是能说出什么叫悲观锁。假如咱们现在啊,比如说你在网上,在一个网站中在看新闻,那按照悲观的方式怎么样,你在看新闻的时候,全国人民都不能看,只有当你看完之后,他们才可以看,这个过程叫被关锁。
10:14
这种方式绝对没有,这种就是丢入更新这个问题,但是它的缺点很明显,因为它是串行的,就是只能一个人操作,所以它的效率很低,你看的时候,假如你看100年,别人只能等100年,他们不能代看啊,这叫闭关锁,但是呢,现在肯定不用这种方式,咱用的叫乐观锁来做到啊,那乐观锁怎么做的呢?给大家说明啊,不知道各位是否是有印象啊,他怎么做的?大家看一下我的文档中啊,我这里写到乐观所呢,主要是加了这么一个东西叫W。Version是什么呢?你理解为就是一个版本号,它通过一个版本号做个控制啊,那我来解释一下这是怎么做到的啊,咱就说这个原理啊,首先第一个就是你在表中呢,加上一个字段,我们调这个。
11:03
Version,比如说啊,它默认的version这个版本值是一啊就是一,那这里边咱用这个。版本号这种方式来说,这个怎么解决啊,就6万所怎么解决,那比如现在Lucy和Mary再进行操作,他们首先要获取数据,版本号是不是都是一啊,就是Lucy得到版本号是一,麦瑞得到也是一,那比如现在Lucy呢,把数据做修改,修改之后他要提交,但是提交的时候要做件事情啊,他要怎么做比较。比较一下,比较你当前数据的版本和数据库中的那个版本是否一样,如果不一样就不能修改,如果一样才能修改,但是他在修改之后还要做件事情,要把里边那个版本号。给的就是加一,比如现在Lucy呢,他把这个500改成了8000,然后改完之后版本号就不是一了,要变成就是二,把版本号要加一。
12:09
啊,那这个过程中,假如现在麦瑞再去改数据,因为他得到还是一的版本,但最后他一提交发现他当前的版本跟表中版本是不一样了,所以它这值就不能改,因为你lose已经改过了,而里边这是一,数据库中是二两个版本没对上,它就不能做修改啊,这就叫乐观锁。通过一个版本号控制,就是谁所有人都能得到数据,但是最终改的话,只有一个人改成功,就是谁先提交,他就做修改,他在改完之后版本号也会发生一个变化,别的人就不能再进行修改啊,所以这一过程就叫乐观锁,通过一个版本号来做控制。啊,这个啊,咱们做这个说明,所以大家啊,把这个过程给他好好去消化消化啊,虽然说啊不是什么面试中常问的问题,但属于一个基础知识啊,属于这个叫乐观所,包括我们在很多地方,乐观所应该咱们都会用到。
13:11
啊,那我来举一个现实中的例子啊,说这乐观锁什么地方用过?给大家举这么一个例子啊。这例子各位应该都经历过。我举一个网站,各位都见过啊。12306咱应该都用过吧,啊,就是咱们在网中抢票这过程其实就很好利用了乐观锁,那这抢票什么过程呢?我来说一下啊,假如我现在啊,我想买这个火车票是从这个,就是比如这个北京啊,到这个这个什么深圳的一趟火车票。啊,深圳的火车票。那这个时候比如买票,假如现在啊,我们打开这个12316网站,咱发现北京到深圳的火车票,比如目前呢,在里边还有这个一张票。
14:00
啊,那大家注意啊,就是现在比如说我打开网站能看到一张票,那别人打开网站这票他是不是也能看到,就是现在这个票,只要你打开网站的这些人,这张票咱是不是应该都可以看到。这个应该能想清楚,比如说现在咱抢票嘛,最终就看谁手快,但这票有没有咱应该都能看到,里边可能有很多人,比如有成千上万人,甚至说上亿人,这张票都可以看到,大家看到这张票之后,比如现在啊,我们要把这票做一个就是订单的一个下单,比如说现在你要抢这个票做一个预定,但是各位注意啊。因为目前啊,因为我很久没买过票了啊,现在的流程怎么样,我不太清楚啊,之前这个过程就是现在这张票,比如现在有,比如说有100个人,或者有1万个人,他这个票他现在应该都可以抢到,就都能抢到,但是抢了之后呢,大家注意最后这个票咱是不是要支付,就是你要付钱。但也发现啊,最终在付钱的时候,这些人中,比如你有1万个人,只能有一个人支付成功,不可能都支付成功,就是谁先把那个支付,那款先打过去,谁先点提交,那谁就首先支付成功,而别的人只能你再支付,提示你说票已经没有了,或者票已经售光,再选择其他车次。
15:19
啊,所以这个一个过程,我再说一遍,楼管所一个应用啊,就是咱这个抢票,所有人都能看到网站中这个剩余的一张票,但最终支付只能是一个人支付成功,不可能所有人都支付成功,谁手快先支付那票就归他了,其他人只能看他再点支付,这个票应该不会再支付成功,只有一个人同时把这票就是进行了购买成功,其他人应该都叫失败。啊,所以这个过程就是这个乐观锁一个比较适宜的一个运动。啊,它是这个过程啊。所以大家把这个知道,就是咱们说的这张图乐观锁,你就记住啊,它是用一个版本号这种方式来控制你的并发,里边这种问题就多人去改一条记录,那这个时候只能是一个人修改成功,其他人不能成功。
16:10
啊,如果你成功的话,会产生这个叫地库式更新问题,最后提交数据会把之前数据给它覆盖掉。啊,这个啊,是咱们解释的这么一个问题,叫丢失更新,大家把这个给他好好去理解理解啊,是一个很基础的一个知识啊。然后这个说完之后呢,刚才大家注意啊,我在里边描述到了,咱们每次提交之后,版本号是不是要加一,而这个过程中,如果咱们手动写代码,你还要做这个修改这个操作,但是咱现在用的框架叫my be plus,在买plus中,你在做这个乐观锁方式,它会特别的方便啊,那我们先看一遍,然后下一课我来演示啊,看一下这怎么做。首先第一步你在表中加个字段。这些字段作业单的版本号,比如说我们叫version啊,当然名字可以随便起,然后你在类里边加个属性。
17:08
在属性上边主要加这个主体叫version啊,这个不是主要的啊,这是咱们刚才自动填充,为了有一个值,主要加个version主体表示版本号,然后加完之后啊,咱们下面需要做件事情啊,因为乐观锁是一个买b plus中封装一个东西,咱需要配置一个乐观锁的插件,插件就要做配置,然后都做完之后,这个过程就可以做到。主要这个流程,第一个加个字段作为版本号,第二个加个属性,然后加个沃生注解,第三个配置一个叫乐观锁的一个插件,用这些可以做到啊,主要这么一个流程。所以大家把这个先给他知道,然后咱们一会儿把这效果给大家,最终就演示出来。在这过程中啊,还有一个细节,首先大家看一下啊,我不知道这种写法各位是否见过啊。
18:04
用这个写法。这里我强调一下啊,你注意啊,我们刚才就是上午写代码中,咱在启动类上边是不是加这个注解,其实这么加没有错,或者说咱在配置插件都小球类中也没有问题,但是咱们在实际中更建议咱们写个东西叫配置类,把这些相关配置都放到配置类里面去啊,就是一个东西叫配置类里边专门做各种配置。而配置类怎么写,就是里边加一个随便写个类啊,名字随便起,你加一个叫configuration,表示一个配置类,在你工程在启用的时候,这配置类也会做加载啊,所以咱一会儿把这些配置啊都统一写到配置类中,在实际操作中基本上也都是写到配置类中,咱一般很少写到启用类中啊,都是用个配置类的时间。啊,咱一会儿通过这个把这效果给大家做演示。
19:01
啊,所以说啊,就是这节课呢,咱主要啊就是把MP实验这个修改操作做到了,包括讲了一个自动填充,用MP的方式可以设置值,然后最后给大家用画图解释一下什么叫乐观锁啊,它主要用于解决就是更新,包括他一个实际场景,就是咱们12316抢票,那过程就你多人都能看到票,最终只有一个人能支付成功啊这就用到了乐观所。包括咱们啊,也大概说一下这个流程,然后下节课我把这个乐观锁该怎么实现给大家,最终做个演示。
我来说两句