00:00
么啊,跟上大部队啊,但是对于这60%的同学也会出现这种问题,呃,老师昨天你讲的杨哥,你昨天讲的那些命令和那个意思我懂了,但是你现在用Java让我用Java代码写,我是不还是崩溃的,能理解吗?好,别忘了哈,就提一点是我我是不是说过一个CAS啊,Check and setting啊哎,先检查再设置好,我们先来看事物,先说日常再说加锁怎么选,怎么不好意思啊,点错了好那么这边我们呢,回到我们的这个好,回到我们的这个ready,现在我们呢,事物呢,Test t X吧,我就懒得写transition了,那个等会再改改名字好,那么呢,这边我们卖,那么大家请看一下哈,这边的时候呢,我们呢和前面呢类似差不多一样,首先我们都知道是不是至少你得。
01:00
做一个解edit的客户端啊,好嘞,那么收购,那么这有了以后我们说过解A点什么monkey是不是啊,大家请看返回值是个什么,请各位同学们一定注意这个transaction,你看看它的包和咱们的那个spring啊讲的那些是不是一回事,哎,他的这个包名也是不一样了啊,那么来这个transaition,这个transaition,那么来这块是不是T啊好,导入我们的包,那么我们大家都知道这个transaition我所要做的是什么东西啊,大家请看这个事物里面我们说过monkey是不是开启入队执行三步操作,那么现在大家看有没有set线啊,123,那么这次我是不是就456了,可不可以可以好嘞,那么来。
02:00
V4那么难,大家请看这边是不是五,这边是不是也是诶五啊,我去好,那么呢,这个时候我们大家都知道在这个monkey和什么cute之间的话,我们要干个什么东西啊,是不是要有一个什么,还记不记得这个eec这个东东是不是有这个E啊,那么言下之意,换句话说,在Java里面是不是就有点说白了,你看这些做模块的代码,是不是也像你们学美一样的open session,然后session.commit中间是那些什么map接口的各种操作呀,哎,这块呢也一样,那么好,同学们看一眼,好,我们呢直星,那么直行完火以后,我们呢,来吧,Kiss星有没有四和五了,好的。
03:00
好,那么现在呢,这是第一步,第二步,假如说我们现在四十四五十五,我们呢,突然发现有问题了,那么呢,我们是不是创3ARD呀,能理解吗?好嘞,那么这个时候按照我们说的,如果说成功是不是要改成44和55,如果放弃的话,是不是回滚了,好的,那么同学们,我们来执行一下lo哈,来大家请看是不是没有被改掉,诶好,那么呢,这个呢,就是是不是也跟我们说的那个事物的什么东西啊,对呀,那是不是没改吗?我第一次看的是不是中间这块我放起来这有什么有什么东西,那好吧,我重新加一个K44V55G行吗?这不是一样吗?是吧?好,那么大家这就知道你你无非就是一。
04:00
这有没有一个是改没改吗?现在能理解了吗?那假如说这样啊,假如说我现在是正常的,那么跟我讲K44K55应不应该有好,你要有的同学还转不过来的话呢,咱们跑一下,那么换句话说,这个是正常执行,是不是44和55就有了那么好,现在我们简单的介绍这些API模拟昨天我们说过的假设我现在就像我们说的,我不想再叉了,或者异常的时候,我是不是要呀,那么这块是不是改不了了,好那么呢,这边呢想说的呢,就是它的简单的A应用,但可能有些同学说我是觉得还是好像还没什么用啊,别忘了重要的来了,我想说的就是这个好,那么来同学们这个是不是我们日常的一些操作呀,好那么呢,来,这个是不是就是伪代码了,能理解了吗?来看一下同学们。
05:00
看看我们在那个好,那么这边哈,同学们呢,请看一下前面那些简单的我就不写了,好不好,那么什么意思呢哈,我们先把这个呢,先关掉哈,大家请看现在我们是不是一个事物的一个类啊,这个类拗了一个,然后呢,我们来测试是不是交易流水的一种某种方法呀,他的意思就说我去调,就像我们昨天讲的那个乐关锁被关锁一样,如果成功了,是不是给我返回错,然后呢,改完该改的值,如果返回force,我是不是认为我这个方法失败,我需要从数据库里面重新再取得最新的数据,再改我的内容啊好,那么呢,大家请看哈,我们呢,看看工作中相关的呢,他做的事情呢,是怎么来的,来先说一下这个,看看读读这段话哈。
06:00
通俗点讲,我们知道锁这个是不重要的,其实是这个卧持啊,我监控着我这个值有没有被别人改过,没改过我才能改,改过了别人已经在我之前提交过一个更新的版本,我本次版本为了不覆盖别人的,我只能回退,再重新取得最新的,再加上我的业务逻辑再提交,直到成功。能理解吗?好,我们一起过过哈,Watch命令是标记一个键,如果标记了一个键,被别人改过了,事物怎么样是言下之意,就像try catch一样,如果TRY是不是是什么catch启事物和catch,咱们是不是watch那些东西了,是这么个意思哈,那么我们只什么,只可以在程序中什么?只好重新再尝试一次,没什么好说的,这个也不奇怪,有时候不要觉得报一常就怎么样,那人家在我之前提交了,我要是在硬提交,是不把别人的劳动成果给覆盖了,那干脆我这次提交我就认为我失败,算了,我放弃,我再从服务器上拽下来一个什么最新的,再加上我的修改。
07:00
再提交,直到成功为止,清楚啊好,那么这边哈,我们呢,首先呢,还是模拟什么我们的什么呀,这个银行转账哈,那么来同学们看一下哈,好,那么这是不是set balance啊,那么假设100块钱,那么set第1BT欠额是不是零啊,那么好,言下之意,同学们应该知道目前我这张信用卡可用余额和下个月所要还的欠额是不是应该放在一个事物里面整体执行,你刷了20块钱的一碗面条,下个月就得赔20块钱,没问题吧,那么好,看看我们的程序呢,是如何处理的,那么大家请看我这儿是不是就是我们的布尔型的一个交易方法呀,那么好,我们干的活呢,首先6379,那么呢,这三个值,一个就是可用的余额,一个是欠额,这个是不是你的实刷金额,当然我这为了做演示,其实这个十是不是应该是你父母表单上刷的那个数字同步过来。
08:00
啊,然后这边的话呢,我们呢,写一个伪代码呢,给大家呢,了解这些事情哈,那么大家请看,首先我为了怕余额被别人改,我是不是要先加个watch监控,好的,加这个监控什么概念呢?加完监控以后大家请看,你先不要管这一句哈,请大家呢,先不要管这个第14行没问题吧?好,大家请看哈,那么言下之意就说这个时候我在balance上面加了watch,昨天我们是不是演示过好用纯命令,今天我们用纯Java,什么概念呢?你的余额如果小于十,刷金额通不通,比如说我现在余额里面只有可用的余额只有十块钱,你非要去刷60块钱,那没有哪个银行同意吧,那么这个时候我们说过是不是要放弃本次事务的监控和提交,那么是不是从watchch变成unwach,然后告诉你,比如说已经有人修改过了模范,或者是些其他的一些什么的提示操作。最终我是不是。
09:00
Force告诉你哥们,你要调这次的业务方法是不是失败的,那么我得到force以后,我只能是什么,再从数据库里面去取出最新的,然后再各种折腾和操作呀,好,那么第二种如果说我这儿余额呢有100,你呢就刷十块钱,那么请问进不进这个,那么这个时候我是不是才是余额在可用可控的前提下,是不是才高高兴兴的开始我的事务啊,那么这个时候大家请看是不是monti开启事务啊,然后这我刷了20块钱一碗面条,这个时候我我这块十刷金额是不是十块钱,我刷了十块钱的一瓶水也好,或者东西一增一减没问题吧,然后这个是开启事物,这个是事物里面的什么SQL语句,或者叫我们的red的操作,然后这个是不是提交,然后提交完了以后,看看我们现在的金额,最终打出来是个处告诉你兄弟你教我这个方法,这种失误是不是成功通过了,好嘞,那么来同学们,我们玩一把。
10:00
现在大家请看我们呢,Kiss,呃,比如说kiss get balance是不是100块钱,现在我的de BT限额是不是零,没用过吗?现在我一跑我的Java程序,我是不是要刷十块钱,那么这个时候诶我刷十块是20啊十块是吧?哈,随便了哈,那么呢,大家请看一直行那么呢,来同学们现在是不是就像我们说的,在同一个事物范围以内,一个减90,一个叫增90啊通不通了,那那呃说错了,一个呢是减了十块,另外一个是不是要还十块钱,没问题吧,那么好,这是Java程序,那么这边那么大家请看是不是九十十块,那么你是不是保证了watch这个现在是不是没有人来动过,好那么呢,这个呢是我们的什么正常的,那么言下之意,从你测试单元覆盖,换句话说,现在这一段是不是跑进来毫无违和感没问题。
11:00
对吧,那么现在呢,我们模拟故意给他出事来,同学们看这个时候我们说过加了watch以后,如果中间没有人加三没有人改,我们是不是可以开启事物,顺利的完成我们这段原子操作,但是现在呢,由于网络上呢,不好意思啊,各种现成的争抢,各种不确定的情况哇,若拥堵接口调用超时,那么我们现在呢,故意呢搞破坏模拟这样的情况,现在假设我就给你说一个七秒钟行不行,同学们我们模拟现在哎哟,这个掉的接口太多,并发性来了,这个是肯定绝对100%会碰碰上的就是高病发了以后请跟我讲这个接口是不会延时,你延时已经说好听的都不算是个事儿了,你也别什么网络丢包啊,返回来一些死的跟一些莫名其妙的问题,如果是换套延时是不是还是慢一点啊,他没死吧,好,那么来同学们好,这边呢,有错。
12:00
有不是有错有异常我们往外抛,那么你这个方法抛了以后,下面的方法是不是也要抛抛,那么这个时候抛什么意思呢?我想模拟的就是现在我们大家都知道咱是不是还有90块钱余额,那么我这儿呢,半路呢,杀出来一个狠的角色,其他县城是不是已经把这个balance用少了,那么用少了以后,只要满足这个条件,我们是不是就放弃watch监控,按watch回滚了以后放弃本次是不是提交了?那么换句话说,在这块领域里面影响是意什么?监控我监控到在我要改之前,别人已经捷足先登了,哥们儿,你也不用去开启事务,更不用去什么开启事务以后ard本次操作我们就要放弃,清楚了吗?好,那么来这儿同学们请看一眼哈,现在我要干的活呢,是这样的,我这块一直行的话,这是不是要停七秒钟,在这七秒钟的话,我这是不是执行一个set balance啊,那么假设我模拟只有五块钱了,请问。
13:00
我本次实刷金额是十块五,是不是小于十啊哎,好,那么这边呢,我要干的活呢,就是这样的,好来诶好同学们看哈我的,嗯,稍等哈,注意我这儿第一波是不是成功的,好看好了,我这儿大家请看这是不是运行着好七秒钟,现在是五块钱,好七秒钟过了以后,我的线程是不是才往下走,那么好大家请看是不是模地Fi被修改了,哎,能理解了吗?所以说这块,那么由于我这watch室监控,注意这个是不是我们模拟模拟生产上的环境网络延十了,系统负担重了,变慢了,那么好这块完活以后我是不是小于十,那么哥们解锁吧,在你之前已经有人捷足先登改动过了,按watch吧,咱们只能什么收到这边的什么force以后,那么呢,结合我们的什么业务。
14:00
话,如果返回force说代表我本次提交没成功啊,只好什么,如果说收到是错,我再继续下一步操作force,我是不是又要从数据库取出最新的再更新以后再提交,这么说能理解了吗?那么结合我们昨天的讲的事务的命令,再结合今天的Java伪代码,结合我们的业务这种加锁,Watch UN watch监控和非和解锁监控,我相信大家对这个锁应该有一更进一步的认识了吧,OK,好,那么呢,这个呢,就是我们相关的介绍,好,下面呢,我们呢来看看是吗?主通复制,那么呢,哎呀,我主从福这一啰嗦,又得起一台机器了是吧?哎呦,还还真不能起这一台是吧?行,我先把它关了。
我来说两句