00:00
欢迎继续收看上硅谷视频课程。我们继续学习六。下面呢,给大家来讲解一下ready中等事务操作,那这事物操作呢,跟我们之前各位知道的买so事物是不太一样的,所以咱们来学习re,事物到底是怎么样的?首先第一部分我们先看一下中针对事物的定义到底是怎么样的。大家看一下我的课件中,这里边是官方一段描述,我把它翻译过来了,然后咱们来看一遍,这里写到red的事物呢,是一个单独的隔离操作,而事务中的所有命令都会序列化,并且按照顺序的执行事务在执行过程中不会被其他客户端送来的命令请求所打断。这是它的一个描述,而事物的主要作用是什么呢?就是串联多个命令,然后防止别的命令请插队,这是针对事物的一个描述,那这句话什么意思呢?给大家解释的通俗点,比如说啊,我现在这里边有这么一个事物,而事物呢,这里提到它就是串联多个操作,因为事物里边可能有多个操作,假如我现在有这么几个操作,比如这是第一个操作,这是第二个操作,这是第三个操作,我现在里边有三个操作,这是一。
01:27
这是二。然后这是三,那在事务中怎么做,他就把这操作进行序列化,然后按照顺序执行,就执行第一个,执行第二个,执行第三个,而这个执行过程中,如果说你现在比如说有别的命令发送过来了,请在里边进行中断,或者进行插队,那这个时候它是不允许的,别的命令不能插入到当前操作中去,就是这个事物操作是相互隔离的,你别的操作就不能进入,这是针对事物的一个基本定义,就是刚才咱们说的这句话,是一个单独的隔离操作,可以防止别的命令进行插队,它会按照顺序进行执行,这是针对这么一个描述,然后这个说完之后,这里强调在re中的,如果进行事务操作里边有这么三个基本命令,咱看一下,第一个命令叫这个Mar,第二个disc,第三个discard。
02:26
那三个命令什么意思呢?给大家解释一下,然后咱们通过例子做个演示,大家看这张图上,比如现在呢,我们想在ready中用事物第一个,你先用命令叫Mar表示开启事物,跟咱们买so中那个start trans有点类似,而当你开启失误之后,你可以执行你的操作命令,但这个命令注意啊,它要按照我们的顺序进行执行。这过程好比说有一个描述叫做组队阶段,因为咱要把命令做什么,你可以理解为放到一个队列中,然后在队列中要进行执行,就是我画的这张图上,比如说把这个一的命令,二的命令,三的命令按顺序放到队列中,但你注意啊,这过程叫组队阶段,但是目前我的命令还并没有执行,只给它放到队列中等待按照顺序执行,而当我们组队之后,下面执行这个方法,我这个命令叫GQ的。
03:26
当执行你的Q之后,他会去执行这个命令,按照顺序执行。但是这个过程中呢,如果你觉得这个命令,比如说某些地方写错了,你不想执行,可以用这个命令叫it cut,它就表示放弃组队,这命令就不定执行。就好比说呢,It cut类似于咱们买so中那个提交事物,Did card类似于咱们买so中那个回滚事务,跟他有点类似。但是他们的本质上不太一样,这个给各位再重复一遍啊,在re中呢,首先第一个阶段叫组队阶段,它会把你执行的命令放到队列中,按照顺序执行,当你执行了你Q之后,它里面会执行你这个命令。
04:11
按照顺序进行操作,在执行的时候呢,如果你觉得命令不对,那我可以用这个cutt放弃组队,它就不会进行执行,所以这是关于re中这个事物的一个这个操作,那我下面呢给大家来演示一下这个操作,咱就来感受一下这个re中的事物到底该怎么去做呢?那我来演示,首先在里边呢,我先把这个re给它先连接上。Set,然后在里边我们用第一个命令叫这个Mar MU。大家看提示咱们是不是OK啊,然后这里边你看有一个东西叫TX,就是咱说那个transaion,表示目前已经开启的事物,然后咱们在事务里边呢,我们要进行我们的命令,这过程咱就叫组队阶段,把命令依次放到咱的队列中去,那咱给它做一个组队,比如说我就写一个,咱来一个S,我加个K,比这个K呢,我就叫K1,然后值咱们叫Y61,这是第一个,然后这个直行之后大家看啊,里边出现了一个提示,是不是叫这个Q字。
05:23
各位应该知道啊,咱们之前用命令之后,外乎几个提示,要么一,要么零,要么OK,但是目前提示是不是叫Q字,它就表示把这命令进行组队,放到咱这个Q的这个队列中去进行,我们最终的执行,目前还没有执行,这是一个组队阶段,比如说咱们像里边再加入一个值,我们来一个T2。然后来一个Y62,咱们回车,这个是不是也放到队列中进行组队,然后组队之后呢,咱们下面把它可以执行,用这个exq,就是EXE的这么一个命令。
06:03
然后现在我一执行,大家看提示咱们是不是2OK啊,它就表示你组队这个队列中的两个命令就真正执行了,所以这是关于我们事物的一个基本操作,大家应该能看清楚啊。第一步开启事务,然后第二部分我们设置的一个命令,命令呢会放到你队列中进行组队,等待执行,当咱们执行你的Q之后,那里边的队列中的命令就会真正执行了。这是我们说的这么一个过程,然后这过程中刚才看到还有一个是不是叫discard discard表示放弃组队不进行执行,那咱把这个discard给各位也是来做个演示,那我们来做一下啊,首先第一个。我们来一个Mar。这表示它启事物啊,我强调啊,当你这个你的Q的均之后,表示事物就结束了,就好比说咱们在买so中提交事物或者回本事物啊,这就结束了,然后现在咱们重新开始马,我们开启事务,然后在里边我们设置它的值,比如我写一个S,咱们叫这个A1啊,然后我叫。
07:15
V1现在组队了,我再来一个A2,咱们叫V2,这个也组队了,但是现在比如说我不想执行了,我用这个命令叫discard,然后咱们回车,大家看提示咱是OK呀,表示目前我就放弃组队,这些命令咱就最终不执行了。所以这就是关于re中事物的一个基本操作,也就是这张图中画的这个过程,大家把这要给他知道,因为你要明确ready中的事物跟my circle是不一样的,里边是这么一个过程。然后这个演示之后呢,给各位继续来演示,因为咱们刚才演示过程是不是都是成功的情况,而在事物中咱是不是有不成功情况,所以给大家演示一下它的不成功该怎么做,注意啊,我们在演示这个的时候,大家就不要再去对比那个买circle了,因为这两个是完全不一样的,那这个错误是怎么处理的呢?咱们先看一下,然后给大家我们来执行一下啊,我们看啊里边有两种情况,首先第一种情况,比如说你在组队的时候呢,你某个命令就直接出错了,那这个时候你在执行,那它里边就都会取消你里边的滞销,就是你组队的时候任何一个命令失败了,那你最终都会成功。
08:37
然后第二种情况,比如我们组队的时候呢,没有失败,但是你在执行的时候失败,那这个时候呢,你这里边只是你这个出现错误的这个命令没有使成功,其他的都会成功,这是他的两种情况。那两种情况什么意思呢?给各位我来详细演示一下,咱们来看一下这个效果是怎么样的,首先我们看第一种情况,就是我在组队的时候,这个命令它就失败了啊,那咱们看会怎么样,咱们来试一下啊,我先给他克里尔清除一下第一个marin,开启事物,然后第二个比如说我来一个site,咱们比如写一个这个be。
09:17
V1,这是第一个命令,咱给他做了组队,然后第二个命令呢,比如我来一个set,这个叫B2。V2,这个也组队了,但是各位注意啊,现在我写第三个命令,但是这个命令呢,我写个B3,咱就直接回撤了,你注意这是不对啊,因为咱们没有设置值嘛,那就表示我在组队阶段,这个命令是不是就错误的?那这个时候呢,比如现在,比如说我在实际中啊,可能我没有注意这命令错误,我现在把它就执行了EXEX咱们执行,但是执行的话,大家看到啊,里边直接报了一个错什么错。说因为啊,你的上一个这个就是这个命令是失败的,所以你最终执行的话,那里边这三个命令都不会成功,这是我们的第一个错误,在组队的时候有任何一个命令失败,最终你在执行的时候,那这些命令都不会成功执行,他就直接暴力错说你命令就不能执行。
10:18
不知道各位是不是能听懂啊,组队的时候有命中错误,最终都不会执行,这是我们错误的第一种情况,然后这个过程中啊,都会执行,他肯定会这里边啊,就是没有做到,最终那个操作没有做到我们最终效果,因为你里边已经失败了。然后这个之后呢,给各位再来演示我们的第二种情况,这种情况,这种情况给大家写下啊,比如说咱们还是测试,呃,我先来一个口令。第一个挖开启事目,然后第二个,比如说我先set一个,比如这个值呢,我们叫这个呃,C1。V1,然后比如说第二个呢,我来一个叫音可瑞,我来一个叫C1,这个我应该记得啊,因可瑞是不是让我的值加一啊,但是目前这个执行会有问题啊,V1不能加一吧,因为它不是一个数字类型,所以咱们因可瑞这里边加一的话,它肯定是加不了,但是我现在执行你看到没有报错吧,因为我现在只是一个组队阶段,这个他能通过最终执行会报错,组队他不会报错,就是目前也是进行到组队操作,比如我再来一个S,这个C2,咱们叫V2。
11:34
这个是不是也组队了,所以大家看啊,目前组队中的三个命令都是正确的,但是我最终执行下。大家看一下啊,它最终效果是怎么样,不知道各位是否能看懂啊,因为它是按顺序执行了,第一个成功了,第三个成功了,然后你看啊,里边的第二个是不是失败了,因为这个命令本身就是错误的,所以这就是我们的第二种情况,组队中如果说你成功,那我执行的话,它里边哪个失败啊,他就失败了,然后别的可以正常成功执行下去,因为我现在第二个是失败的情况,他就失败了,但是我的第一个,第三个这个都能成功执行,所以这就是。
12:16
Ready中事物的特点,大家要明确里面这个特点啊,最终给各位总结一遍啊,刚才我演这个过程,首先第一个ready中的事物呢,跟买circle是不一样的,它是一个单独的隔离操作,它里边就是会序列化,按顺序执行,为了防止别的命令进行插队,它里边有这么一个过程,第一个过程叫组队过程,第二个叫执行过程,组队里边并不会真正执行,它会把这个命令放到队列中等待执行,当你执行你对客的方法之后,他会执行,若单执行cut,它会把里面命令就是放弃组队,最终不定操作。在过程中咱们演示了里边的正确效果,也演示了两个错误效果,在错误效果中,大家记住两种情况,第一种情况,如果说你组队中就有错误,那最中都不会执行,第二种情况,如果组队中没有错误,你在执行的时候谁有错误那谁就不执行,没有错误的还可以正常执行,这跟我们的买中完全不一样,因为它里边是这么一个特点。
13:27
这是我们提到的关于中事物的这么一个说明。
我来说两句