00:00
那么乐观锁的原理呢,就是添加version字段,好,那添加version字段的话呢,实际上在我们的应用程序当中啊,我们已经给他定义了一个version了,而这个version呢,在这个位置。在这呢,是不是啊,然后我们来看一下我们的数据库的表的设计啊,这个数据库表的设计呢,这这是version,我们给这个version呢添加了一个默认值叫零。啊,那么针对于我们的SQL语句来说的话呢,就是刚才的这个位置。叫DEFAULT0对不对啊,然后所以呢,所有的数据呢,它都有一个默认的版本号,那就是零了,那接下来呢,我们针对乐观所这个解决方案的,它的基本的思路是什么呢?首先先把这条数据取出来,比如说呢,我们就把这个SQL语句呢。执行一下。在我们的这个地方啊。Select所有的列,然后from product,把ID唯一的这条记录取出来,那么这个时候有一点需要强调的呢,就是。
01:09
我们一定要。带着这个version列,也就是说我们的查询语句当中一定要包含这个version,先把version呢从数据库中取出来啊,封装到我们最后的那个product的对象里面去好,然后接下来呢,下一个步骤我们做什么呢?我们要做的就是更新的时候是不是要携带着version呀,要看version,看看这个version和我们当时取出来的这个version是不是一致的。如果和当时取出来的这个version是一致的,那么我们就干嘛,我们就做更新,并且给version的版本进行加一,如果和我们当时取出来的这个version不一致,那么我们就不做加一,那并且呢,呃,这样的一个。啊,更新呢,也不会完成,所以呢,呃,至少不会发生修改的并发冲突,是不是啊,并且呢,修改人通过我们的返回结果也会知道他的这次修改是失败的,我们就可以在基于失败的基础上发起重试啊好,那接下来呢,我们来说一下这个过程。
02:15
把这个复制一下。这是两个circleq啊,我们来再次的通过SQL语句来演示一下刚才的过程,比如说首先第一个步骤。小李。去数据对吧。小李取数据啊,好,小李取数据的时候呢,它是不是执行的是这条语句啊,好,它一运行是不是他取出version等于零,好小李的version。等于零啊零好,接下来呢,第二个步骤,小王取数据。小王取数据的话,小王是不是也执行这段代码,好小王一除数据,他沃身是不是也等于零,好沃等于零,接下来呢,小李改数据。
03:08
小李改数据啊。好,小李改数据的话,他是不是加50啊。加。50。好,那这个就是小李对这个数据进行了一个修改,那小李改数据的时候,实际上他当时取出来的那个price应该是100吧,对吧,它是在之前它取出来的这个数据的100的基础上加50啊,然后他之前取出的version等于几等于零对不对,所以呢,他要在之前它的这个零的基础上进行加一,那零加一就是一了。我写零加一吧。好,他在零的基础上进行加一,然后呢,他的ID也是一,但是当时他取出来的这个数据记录的version等于几啊,是不是等于零啊,所以这块呢,小李改数据的时候呢啊,他要先找到沃等于零的这条记录,也就是说跟他所取出来的这个版本号一定要保持一致啊,在他的这个版本号的基础上进行修改,然后呢,把这个数据记录的price呢改成50,并且呢,把这个version把版本号呢进行一个更新,好,所以这是小李改数据。
04:18
好,小李呢,把这个数据改完了之后呢,我们来看一下这个结果。数据改成一百五了,对吧?好,接下来呢,就是小王改数据,小王改数据呢是减30,那小王改数据之前啊,他取出来的这个数据的price是多少,是不是100,哎,我把它。这样写啊。把这个痕迹给他留一下哈,小小李啊。小李。好家务事。然后小王减30。好,好,那么小王当时取来的数据是不是也是100,好,他在这个基础上呢,进行减30的操作,然后接下来呢,小王当时取出来的version是不是也是零啊,好,那么他就在这个基础上进行一个version加一的操作,好,小王当时取出来的数据因为是零,所以呢,Version也等于零,好,那现在小王呢,对这个数据进行修改。
05:24
运行。大家看是不是没有任何数据被修改,那也就是说小王会得到一个什么结果呀,说你的修改失败了,请重新修改明白吧,啊所以呢,大家看这面。小王一看,诶没修改成功是不是,所以这个时候小王做什么重新修改,重新修改的话,那修改的过程呢,那系统啊,我们会给他重新的把这个数据呢取出来,好小王修改失败,重新修改。失败。重新修改,然后重新修改的过程,系统直接呢,把数据呢,给小王重新漏的一遍,所以呢,又是小王取数据,小王取数据,然后大家看这个数据执行完了之后。
06:10
是不是等于一了啊,Price等于一百五对不对,所以呢,Version等于一了已经,然后此时此刻小王拿到的这个price呀,它是等于。等于150的啊好,然后接下来呢,小王呢,重新修改,取完数据之后,小王再进行修改。好,那此时呢,小王再修改。小王在修改的过程当中呢,他拿到的数据呢,刚才是150,他在一百五的基础上呢,进行减30的操作,然后他拿到的version呢是一,他在一的这个基础上呢,对版本号进行加一的操作,然后呢他拿到的数据是一,所以呢他查找的这个version应该等于一,他查找version等于一的数据,然后呢对他进行版本号加一的操作,并且呢把价格修改一下,所以小白再修改。
07:07
运行好,修改成功,那么我们再来看一下最终的结果。这就相当于老板看数据了是吧,老板看到的数据呢,就是price等于120,然后version呢,是不是等于二啊好,那这样的话就完成了一个通过乐观所帮助我们去解决并发冲突的这样的一个呃功能啊,所以这个呢是我们乐观所的基本原理,好,我们掌握了这个乐观乐观锁的基本原理之后,我们就要了解一下在买贝斯plus当中,它是如何把这个功能作为一个插件。帮助我们自动实现乐观锁的好,什么叫做自动?所谓的自动,就是这一大堆复杂的内容都不用咱们自己去做。明白哈,所以呢,接下来我们要了解的就是乐观锁插件这个功能。
我来说两句