00:00
好,各位同学,那么理论完成以后,接下来第二阶段代码说话实操案例,那么怎么玩来?先看官网,Usage就在官网上就告诉你了啊,怎么来使用我们的这个red的事物,那么好,我就不再反复切换对应的知识体系,全部给大家进行了抓图,我们就看我们的脑图笔记,他告诉你,如果一个rise事物你想和被开启的话,请你使用marty这么一个命令,好,那么这个命令通常会回复一个什么OK等等等等,我就不再逐字逐句的翻译了,说人话。整篇文档我把它分为了五大案例类型,你把杨哥这五个拿下,全部搞定,分别是正常执行、放弃事务、全体连坐、冤头债主、握持监控,走起。第一个全部命令给大家整理到这儿,Ready事务相关的命令常用的也就是这五个,第一个看名字也不明白,Discard取消事务,第二个执行事务,第三个开启一个事务,第四个T取消监控,第五个watch监控,一个或多个KOK,好,那么第一种情况所谓的什么正常执行?
01:15
那么来开启执行,那么在这两个关键词之间,中间就有一大堆对应的red命令,好,那么同学们来吧,首先set k1V1 set k2V2,对吧,那么比如说这个inquiry,然后假设啊,好像前面有个in,我把它删掉,Delete删掉,再来一次,嗯,那个inquiry,然后呢,看这么说没问题吧,那么同学们都很清楚,我现在故意执行了四条命令。单独而言,每一条命令都是原子的,但是我现在想四条命令合二为一的干,那么这时候你会晓得。我们是不是需要ready事物。把它们。
02:00
串联在一块,顺序执行走起。那么接下来同学们请看Mar。开启事务我们先正常执行,那么sat k1 V1ok吧,那么sat k2,假设我还是叫V2,那么sat k3,注意新来了一个,那么inqui看又加了一次对吧?那么这个时候同学们请看我在执行开启之前。有个东西叫Q,这什么意思啊?一个什么队列中啊,也就是ready的指令,它不是发一条执行一条,发一条执行一条,一旦你用了ready的事物,它是先把它放在一个什么队列中,然后在一次性顺序的排他性的执行系列命令,OK怎么来?同学们,OK okk值是二,那么现在get k3有没有完全搞定,OK好了,那么同学们,这个是我们对应的第一组命令就是什么正常执行好,第二个命令叫放弃执行,那么也就是marty。
03:02
开启中间有一堆指令。摆弄着,摆弄着,执行着,执行着,我觉得不想要了,Discard,请放弃,好,那么同学们请看啊,Get cut现在是多少?当前值是二,好Mar,那么sat k1V1,一,Sat k2V2,二,这么说没问题吧,那么现在inquiry,看,我又加了一次,如果我用这个好说。全部成功,但是现在我第一次看同学们请看OK,那么队列里面的所有命令放弃执行,此时我get,看同学们请看值是多少?2GETK2多少,还是老值V2,并不是心值V22,那么这个就是事物的放弃好第三一组叫什么?全体连坐。和第四组冤头债主,那么全体连坐,那么就是什么?假设四条命令一个人出错,一条命令出错全部打回去,但是第二组呢,叫冤头债主,我们可能会有这种诉求,哥哥,对的执行,错的停下来,那么换句话说,冤有头,债有主,你别一竹竿打死一船人啊。
04:14
你别找我,我们对的你放行,错的你就给我停下来对吧,也就说你找错的去,所以呢,为什么会出现这种情况呢?那么这个首先先看官网。他告诉你了as inside a transaction,就是说在事里面发生错误的话会怎么办,那么在事物的执行过程当中,是有可能进行到two kind of command arrows是两种情况,所以这两种情况那么官网上就说了么?一大段话,杨哥就给你总结成全体连坐或者是什么冤头债主,OK,看名字也能明白,先看第一段全体连坐,他说一个命令有可能fail tobe killed就是你。没有办法正确的加入到我们的执行队列里面,So there may be an area before就是在调用。
05:05
Ex ec执行命令之前,你的命令就是错的,那么所以说对不起,这种情况下我们呢,没有办法执行,所以只好把这个队列里面的全部反弹回去,那么第二种情况是什么?阿尔法塔,EXE,第一种情况是b for ex e,所以这两种情况同学们务必整明白好,那么接下来呢?我们呢,来看一下啊,这个全体连坐,那么首先那么假设我们再来一个啊SET1没有那么假设这个时候是杨哥的邮箱啊啊顺便说一下,网课期间要是部分同学这个学习上有困难有压力啊,因为我太忙了,不可能在微信上或者是电话上一一回复,有兴趣的朋友呢,可以给我发邮件啊各位同学。再难杨哥也会支撑你们,现在找工作要有真本事,跟着我学,一定能够正常的找到一份工作,好,那么接下来开工啊,那么大家请看。
06:03
Mark开启一个事物,Set k1V111,没问题吧,好,现在请看啊,我呢,Set k2V222,我相信你也没有意见,但是这个时候我故意啊故意写错,听懂了吗?Sat k3,我后面是不是应该正常的写个V3吗?对不起,故意写错摆烂,那么这个时候请大家看出现什么情况。我是不是还没执行EXCC,在这个命令执行之前,他呢,就告诉你这句话了,好,这个时候请大家看我在执行。怎么着,看一下这个说明啊,执行被AB about中断了,这个事物discard被整体取消了,因为之前的错误,所以此时请同学们请看get k1怎么着还是原来的老get k2怎么着还是原来老值新值根本注入不进去,明白了吧,所以同学们这个就是我们的全体连坐,那么就就跟刚才的具体的写法来这儿,K3V3不写,故意写错,语法编译都不通过,那么在这就报错,也就是在执行XCCC之前就报错了,那么大家可以看到一个语法出错,全体都要受到连坐,OK,好了。
07:20
那么接下来第四组冤头债主,我们看名字也知道。来吧,官网说明。I happening after ex e,这有点类似于我们Java里面的异常叫什么?执行以后的异常叫runtime exception,运行以后才会出现的异常,听懂了吧?那么这这么一大篇,只有重要的,就这句话,这是非常重要的,也就是说这样的一种情况,当一个命令失败了,All the other commands in the q are process,就是你确实有失败的命令,但是其他的这些命令还是会继续去执行,因为它是什么?After就是前期的语法错误,你没错,我根本没检查出来,不像刚才这样的,你明明应该set kv,根本就没有写这个V加入队列的时候我就已经提前给你检查出来了,但是这个你都没写错,但是对不起,我要运行了时候我才会明白。所以这种情况下就会导致一个问题。
08:18
怎么着,一出错了怎么办?传统的关系数据库我可以回滚呢?那么what about robots,对不起,Right does not support。S of transactions supporting OK,也就是说我们的red,对不起,我根本就不支持roll back事物回滚,那么这个也就是red事物跟我们传统的数据库事物不一样的第二个地方一不是绝对的。事物一致性,第二个没有回滚操作,这点要搞清楚,OK,像我们的这个MYQL就是全体连坐,但是它还会有烟头债住,那么这个时候给大家演示一下啊,大家请看get什没有有吧,好,那么杨哥邮箱有,现在我故意要写这个邮箱是为什么呢?用到这儿请看SK1,这个时候V111好,SK2V2222同学们,这个没问题吧,那么然后cant这个也没问题吧,但是请看啊inqui email。
09:22
怎么着?同学们都清楚,我这个email邮箱怎么可能用自增操作呢?但是对不起,这个语法上,现在red认为检查你没有错,哎,这个时候我就混水摸鱼,鱼龙混杂了,那么这个时候再来赛K3V333,好吧,很开心吧,12345几条命令,五条命令看好了,EXE执行出现什么情况?第一条OK,第二条OK,第三条OK,第四条L,所以他就告诉你这个错误的值要么就不是个整数,或者是超出范围,第五条OK,所以此时同学们请看get k1。
10:02
你们觉得应该是老值还是应该是这个心值啊,怎么着,所以哎,这种情况下它是会起作用的,所以在这一定要跟我们传统的关系数据库做一个区别,人家没有全体连坐,有些时候是全体连坐,有时候是源头债主,那么就是什么错的,你给我停下来,对的,你给我执行,OK,所以注意和传统数据库事物的区别不一定。绝对的要求,要么一起成功,要么一起失败,也有一种情况,就是我们刚刚所说的前期语法都没有错,编译也获得了,通过执行exec之后才会报错,那么冤有头,债有主,对的执行,错的停,OK,好,这就是我的第四种情况,冤头债主,那么接下来就是我们的第五种情况,最后一种俗称什么watch监控,那么。一句话,监控什么概念?它的意思啊,是跟我们的锁有点关系啊,Ready,使用watch来提供什么乐观锁定,类似于CS check and set,来吧,快快的复习。一说悲观,那么就是我们的look and look think nice说顾名思义我很悲观,就是我认为我每次去修改的时候别人都会来加三,对吧?那么所以我在每次拿数据的时候都要加锁么?这样别人想拿这个数据就会阻塞,对吧?一说think lock lock大家都懂,那么请大家思考一下,你们觉得red能不能这么干?
11:24
这么干的话,就不可能是一个高性能的。缓存数据库,因为它为了保证数据的一致性,是一上锁,一上锁是不是数据安全了,并发性能就下降,所以red想一想,我还是用乐观锁,当然optimistic lock,顾名思义很乐观,我每次去拿锁的时候都会很少很天真的认为别人不会动,所以我根本就没有加锁,没加锁是不是不会阻塞,不会阻塞是不是性能就高,性能高是不是就是高可控高性能的red缓存数据库的达到条件,但是我们在更新的时候会判断一下在此期间别人有没有去更新过这个数据,那么有点类似于我们的什么G啊,SVN那样的版本提交,如果我拿下的版本是否别人已经提交到版本号是八了,我再次提交,我想把它改成六,那对不起,我手头上这份是五服务器上的版本,已经是八了,那么我本次操作就作废,只能重新取下来最新的版本,然后在这个基础上再改,再提交,直到成功为止,对不对?有点像我们GOUC里面的CAS,所以乐观所的策略就是你提交的版本。
12:26
必须要大于记录当前这个版本才能提新,也就是说我手头上这份,我认为服务器上那份没有人改过,我手头上这份要比服务器的更新我才能去更新,OK,说明没人动过,所以呢。呢,也就采取了乐观锁这样的一种概念。来,他叫CS,请看支持什么乐观所锁定用check and set,那么来吧,Watch,然后呢?他告诉你了,Watch呢,是提供了一种检查并设置值的行为,对事物说人话,就说我拿这个watch监控一个key,然后呢,我就去干活,如果这个key在我监控期间没人动过,那么。
13:10
OK,皆大欢喜,否则我监控了以后,我在修改的过程当中,别人也动过了,那么我再执行的话,对不起,本次失误的操作就会受到一个难,我告诉你这个事物被别人打断了,只好重新来一次,OK,所以这个就叫check and set,有点像我们GOUC里面的CS,好理论整明白以后,那么同学们请看一下watch。我们设置两个K,模拟一个这个啊啊,这个初始化K1和balance balance是银行的余额,两个K先肩靠。再开启我们的事物,然后保证两个key变动在什么同一个事物以内啊,这是我们的初始化操作,好同学们请看get k1set balance,那么监控,然后Mar,然后执行,我们先说正常情况,好同学们来set k1ABC好吧,Set balance,然后100块钱,弟兄们现在是不是尤且仅有一个客户端在操作,不会有人给你加三,我们待会我会开启第二个客户端来给你加三,来给你抢,那么下面请看啊,What。
14:18
好,你监控,你看可以监控几个K多个,那么这我们就一个就够了啊balance,我监控这个K了啊,那么然后再开启这个事物,同学们请看set k1ABC2对吧,然后呢,Set balance,然后呢是变成110110块钱了,好,那么现在执行同学们请看两个都OK吧,那么get k1abcr get balance OK 110没问题,这个就是监控,而且现在监控了以后没有人来动,没有来跟我抢,我们就顺溜的执行好初始化数据完成。那接下来有加塞有篡改了,我们的操作步骤是这样的。
15:01
Watch命令前面说过了,是一种乐观所得实现,在修改的时候会检测数据是否是被改过,如果改了,那么执行失败,那么大家请看啊。第一步,我先肩靠。第二步,开启事物,第三个大家请看看来端二有人来它来加三了,现在的值是110,我要把它改成120,对不起,监控的这个K,如果K被修改了以后,那么对于我们的CLIENT1,它后面的这个事物的执行就整体失败了,OK,好,那么同学们,我们呢,对照着来进行一下处理,那么这个我们呢,直接请看啊get。Balance当前值是110,好的,那么同学们请看啊,Watch balance这波没问题吧?那么假设啊,我呢,监控了这个动作,然后开启这个事物,我set balance,那么假设我呢,想把它设成200,注意,我还没有按下回车,没执行呢。
16:06
不好意思,这个时候呢,第二个客户端他过来了,他干了一件什么事,他先捷足先登了,加塞了,那么来赛balance,我就干成了300好get balance。这么说没问题吧,当前当前的最新值是不是已经变成了300了,那么这个时候同学们请看有没有加入队列,加入了啊,再来我你看我sat k2,然后呢,这我就把K2设成叉叉叉是另外一个K的操作,好吧,那么好了,这个时候我执行。对不起,啥东东,那说明什么?说明是不是有人捷足先登了,那么这个时候同学们请看我get kr多少还是上面的老职V22叉叉叉根本没起效,我再给他balance啊,你设定的200根本就没有成功是多少,300是最新的值,比如说服务器的版本已经比你当前的手头上的高了,你提交不上去,所以就返回一个,那那么正如我们官网上的笔记,他就告诉你。
17:10
Watch被监控的key如果被修改了,在你执行exccc命令之前,那么个事物,你看整个事物,我刚才故意了,是不是还有设了个KR等于叉叉叉呢,对吧,将会被board中断,所以你执行X一会返回一个,那这么一个回复来告诉你事务失败了,所以返回一个呢?OK,那么同学们这个呢,就是我们的什么D。五种情况watch监控,那么来,弟兄们,这个叫什么?安watch明白,这个叫开启监控,这个叫什么?放弃监控,OK,怎么来,怎么玩呢?很简单,这个我就不执行了,作为家庭作业,请同学们自行操作,笔记很详细了啊,第一个我监控这个key。第二个我得到这个K,第三步不好意思啊,我监控着呢,然后我突然发现啊,第三步有人已经动过了,哎呀,我觉得也没有必要开启事物了,干脆直接放弃吧。
18:07
On watch明白,然后就是这个命令的一个逆操作,好吧,那么完了以后我放弃了以后我再开始一个T,听懂了吧,那么第三的时候是多少,是200,那么我这个我就会发现如果有人动过了,没有任何意义,所以我放弃监控,那么最终大家请看我现在再来设置。OK 300加入,加入才会是OK第五步,所以按watch就是这个命令的一个什么放弃监控的一例,操作很简单,OK,同学们下去呢,按照笔记自行处理一下,那最终我们来搞个小结,第一个一旦执行EXCC之前加的监控锁都会什么?被取消,哎,我要提交了监控,你就可以退休了,那么当客户端连接的时候,比如退出链接,所有的东西都会被什么取消监控,哎,你都不跟服务器联系了。
19:00
对吧,领导都不重视了,你服务器的链接该关的关了,该退的退了,所以呢,我这也就要取消这个监控,这是两个小细节的补充,OK,好,那么最终我们来总结,所谓ready事务,就是开启、入队、执行共计多少三步操作,开启multi开始一个事务,入队,将多个命令入队到事务当中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面。最后第三步,执行,由exccc命令触发我们事务的提交,执行等待队列中的所有命令。好,那么各位同学,这个就是我们对事物的介绍。
我来说两句