00:00
呃,Red com的配置文件和red的持久化,那么呢,RDB和LF呢,给大家呢进行了详细的介绍,那么呢,下午呢,我们呢继续呢后面的学习内容来看看red的事物发布、订阅、主从复制和Java对red的编码的一些规范。好,那么呢下面呢看一下事物,那么事物这边的话呢,呃,我相信事物咱们第一次聊的时候是不是和大家介绍过了啊,如果说面试的时候要问你的话,你最经典的举例是不就是你转账啊,实在不行的话,就像我们说的给房东转账,你这儿少1000,他那不是多1000啊,要么一起成功,要么一起失败哈,但是呢,呃,结合我们今天所要介绍的,以及后面买SQL高级部分所要讲的内容,这个简简单单,肯定不会说事物就这么一句话,收工哈。
01:00
比如说像这边的话,那么我们呢,会帮大家复习一下前面的哈bernet,那么简单而言,大家应该听说过这个乐关锁,背关锁对吧?然后的话呢,如果到后面买SQL事务高级的时候,会是不是会和大家专门有用一张是锁的介绍,寒锁,夜锁,表锁,间隙锁等等是不是都会和大家介绍啊好,那么这边的话呢,我们呢,继续呢往下走,首先大家请看呃,那么这些呢,都是你们工作中你要用得到,然后面试中笔试中也会考的哈,来看看red的事物呢,它呢又是如何的一个玩法,首先它是什么?可以一次执行多个命令,本质是什么?一组命令的集合哈,那么呢,换句话说,就是说一个事物中的所有命令都会被序列化,它可以按顺序的串行。
02:00
化的执行,而不会被名其他的命令插入,嗯,不加三,什么意思呢?从我们开工介绍red到现在,大家都会发现,比如说set keve,早上咱们干RDB的时候,两分钟我是不是改了十次啊,嗯,好,那么这个时候可能会有这样的诉求,我要求你的这些命令不是立刻提交,是批处理,有可能一口气呢攒着是五个red的命令,一起成功一起失败,大家觉得这种在生产上会不会有这样的诉求?哎,那么呢,这边的话,换句话说呢,这就是red事务,说白了就是什么,你能不能够一次性批处理,排好队,按序一次性的执行什么一堆或者是多个red这么说OK吗?来,那么呢,我们来看看red呢,因为这抓出。
03:00
要和同学们说一下,有一次呢,这个有一位同学去面试的时候,那个面试官跟他说red不支持事务,这个时候呢就把我干懵了,我说官网上这么大个词儿,这也应该不会是我们乱说吧,对吧?那么大家可以看一下他的说白了我们的reddi是不是执行放弃监控等等,是不是都是red里面所用到的命令啊,那么呢,这边的话呢,请大家中间的呢,有兴趣呢可以去看一下,然后呢,注意一下这句话从2.2开始版本的话,Red的话呢,它呢是不是又支持一种什么check and setting CS的操作呀,那么这一点呢,就跟我们的监控和乐关锁闭关锁呢,有点什么相关的知识,那么呢,这块呢,会和大家来进行深一步的介绍,好那么来看看哈,他能做些什么,注意是在什么当中。
04:00
队列,一个队列中一次性的顺序的排他性的执行是吗?一系列的命令,好,那么不管怎么说大家都知道我们的Oracle,那是不是觉得对CP这种理论而言,它是不是对于强一致性是要求特别严格的,换句话说,一条,两条,三条,多条,你要么一起成功,要么一起失败,是不是没什么话好好讲价钱的好,那么这个是我们传统的关系数据库,那么no circle这边呢,我们大家呢,继续来,好,大家可以看看这块的话,他是不是要什么,如果要开启一个事物,按照他所说,你要ENT就进入也好,或者开启是用哪个命令,是不是这个命令啊,那么呢,最终的话,他跟你说了这个命令,通常会回复你一个什么,注意,他回复你OK,不见得真实。
05:00
哎,能理解吗?他只是告诉你可以现至待会儿我会看到,他只是告诉你什么呢?哥们,这事儿我收到了,办不办什么时候办,办不办的成,咱们俩说好,待会儿我们会看到哈,那么在这一点上呢,啊,用户呢,将会用什么一次性的是不是打多个命令而代替执行,一个一个的执,挨个的执行啊,那么呢,注意将会把它什么P这个是不是队列的意思啊,换句话说是不是就是什么入对好,那么所有的命令将会通过哪个命令来被调用和执行好,那么后面的话呢,也就不用我介绍,换句话他的意思就如果你用discard这样的话,是不是代表放弃丢弃不玩了,那么言下就是本次操作有点类似于这样,你呢,一口气打了五个命令,打到第六个的时候,你发现诶,突然反应过来,第四个命令肯定是错的。那么这一次要。
06:00
有一个错,我干脆就不再执行,是不是可以打开迪卡放弃本次的这个批处理操作呀?诶那么呢,所以说我们这儿呢,了解了在官网上的要求了以后,那么呢,把red的事物呢,分成了这么几块给大家进行介绍,好那么呢,这边最重要的呢是什么握持监控啊那么前面好,那假如说按照这种case的五大分类,我就算没讲,我相信万文之义大家7788也应该猜到个大概了吧。好那么首先哈,我们呢,来看看常用命令,大家请看是不是这五个呀,注意这边是执行,这边是什么标记一个竖块的开启没问题吧,有点类似于是不是就像我们的什么session.open session啊啊,这货是不是有点卡啊,Open session和和session点卡之间是不是你。
07:00
你那些S,比如说我们转账写两条update,一个账户上减100,一个账户上多100,那是不是曼那个数字就会在等号右边多一个加一个减啊好,那么这watch on watch discount是不是取消放弃,那么watch on watch,注意今是几个没问题吧啊好,那么这儿呢,可以看一下,那么这我们再说一遍,我监视的这个T,如果也就是说就有点类似于哈,比如说我监控你信用卡的这个可用余额,某一个关键性的数字在你自己就点类似,就这么说,比如说我现在呢,啊,要去动一个一条记录的某个关键性的信息,我呢先给他监控,那么好,我的监控的意思就是,比如说我打一个标记哈,假设现在这个里面的值是78 OK,我这叭叭叭叭叭的动,然后我一提交一提交回去,我发现我监控的时候速度是七。
08:00
八现在还是78,也就是说没有人动过,那么我本次操作是不是就OK呀?但是如果说我当时在数据取下来的时候,这个值呢,是78,但我回去我做完我的操作了,要重新去提交,我发现他已经变成了92,换句话说,是不是别人已经先我之前已经提交过了,那么我这个watch监控未提交时候将会什么失败?告诉你哥们儿,不好意思啊,你指的是什么?先什么放弃本次的监控和提交操作,干嘛麻烦你呢?再从数据库里面抓一次最新的数据下来再改,然后才能提交,否则是不是有点像我们的GI或者an的版本冲突了?好,那么这儿呢,大概呢,先说一嘴哈,待会会讲乐贝关锁的时候和大家呢详细介绍,那么来我们来看看我们的redis呢,对于事物呢,正常执行哈,那么呢,这边。
09:00
是不是我们的red LF这个好,那么来下面呢,Red client-P6379好,那么呢启动成功,那么呢,这边我们L-L好,大家请看目前而言是不是还是only和RBB都OK的好,那么来现在我kiss是不是1234啊好嘞,那么flash DB我呢先给它删掉哈,那么现在是不是都空了好,之前大家都知道我比如说set k1V1,现在是不是一条好,那么现在我呢比delete he,我干的活呢是这样,首先开启事物用哪个是不是Mar啊好。
10:00
好嘞,那么正常的执行是这样的,请大家看好我们的官方文章,人家说的哈,他说什么这个命令是不是通常都会反馈给你,OK,那么言下之意,我现在就是是不是开启事五标志成功了,那么这SK1V一看好,我现在的操作是什么?入队有没有执行?哎,好比如同放学以后,同学们去附近的金可隆啊或者什么超市,你现在呢,Mar是不是相当于说你推着一个购物车进去啊,然后不停的去逛商场,往里面购物篮子里面呢,酸奶呀,牛奶呀,苹果水果都去弄,请问这个时候你还没有逛完,是不是还没有到收银台结账呢?那么言下之言,这些挑选的过程是不是就是一个入队,也就是你加入购物车的一个过程,我现在有没有结账呢?好,那么再来。
11:00
没问题吧,好,可以吧,注意没有限制你的命令,你什么命令只要是我们学是不是都可以往里面加,只要符合什么red的规范,能理能理解吗?好,大家请看是不是一堆queen啊好嘞,那么这个时候那么好大家看一眼是不是各取所需啊呃哎,注意有可能你在生产过程当中哈,比如说我这条转发也好,或者微博转发也罢,那么有可能什么前三个get或者是设置是不是有人去评论的,那么这个是不是只是有人一个人查查看了,那么换句话说,该评论的设置的设置,该查看获得的是不是获得,咱们大家是不是可以在一个原子操作里面各取所需,通通完成啊诶,好,那么大。
12:00
大家请看现在我是不是一口气执行了什么四条red命令啊,那么跟我讲,比起我们第一天所学的内容,这个功能是不是更加被加倍的加强了,哎,批处理哈,好,那么这个呢,是我们的什么正常执行好,再来放弃事物,那么呢,什么叫泛起数呢?大家请看哈,那么market好,假设set k1 V1 set k2 V2,或者就这样吧,22吧,Set k3 33,突然我发现我不想要本次操作了,因为我们知道如果eec的话,现在这些只是不是会被正常的被修改掉,但是我突然发现discard,那么言下之意,我们一执行,现在我get kr,大家觉得是V2还是22没问题吧,OK,那么呢,这个呢,就是我们的泛弃事物好。
13:00
我相信这两个不用再细讲了吧,应该是so easy好理解吧,好,我们把重点的花在后面好不好?节约同学们的体力和精力好吗?好嘞,那么呢,全体连坐,光从这个名字你会怎么想?对,是不是只要有一个导弹的这一票全死啊好,那么呢,我们大家看market set k1V1 set k2V2 set k3V3,然后我这get set k3好,我这不故意整整错一个吗?Get k4V4,大家看有没有直线,是不是还在继续加入到队列里面呢?好,K5V5,好,这个时候我强硬的执行哈,是不是挨着那么言下之意,同学们。
14:00
第一个K1K2K3倒是有的,咱们不说废话,这个时候会不会有我们看一眼是不是那啊哎,那么所以说这个就是是吗?是不是有点像我们原来的那个版本,就是要么一次一次性全部成功,要么一次性全部失败了,好嘞啊get k2哈,好get k2是不是第一次加进去的啊,原来的,所以说什么原来的就是说即便言来的我set,注意我这个set是不是都没成功啊,言下之意就是说这五条命令有没有被落地执行啊,因为中间是不是有个连坐的呗,他依然出错,是不是全部受罚呀,哎,所以说就倒霉了哈,那么呢,现在呢,我们再来看哈,好,大家请看我A1,我现。
15:00
这是不是啊,K1,咱们是不是从V1改成AA了?好,这个是不是哈,假设现在哈,同学们再搂一眼,咱现在只是说不是K1K2K33了,好嘞好,那么呢,全体连坐完成以后,下一个是什么?那么从这个名词而言,大家觉得会应该是什么呢?嗦,哎,很好啊好注意哈,这个是,嗯,那个呢,因为我个人觉得呢,他他觉得官方文档上他写了很长的一些啰嗦的废话,我觉得像这样五点的话,大家是不是记忆起来比较方便了啊,当然哈,如果你觉得这些用词不当,那么反正老图发给大家,你可以改成你自己的学习笔记,不过从过去那些班的同学来说的话,特别记得有一哥们去砍跟人家砍这个red的事物的时候,就按照这个从头背到尾了,以后不是背啊,他当然肯定全部理解了,把那个面试官砍崩了,然后人说行吧,你过来跟我们一块干,你就在数据小组里面帮我们挑优,他说好,真敢接,然后之后的话是不是源源不断的问题发给我,给我累死了是不是?
16:00
注意哈,这个对男生而言,22~28岁这五年是你们积累,绝对不要怕,有机会就上,干砸了,了不起,我走。但这种练级打怪的时间空间,这种机会不是每个人都有,如果真要是他要是跟你说,你为什么离开上一家公司啊,哎呀,这个创业倒闭了,这不就完了嘛,好吧,这个这个事儿很简单,但是你要,但是反过来讲,你就算在上一家公司,只要你敢干,尤其对男生而言,30岁以前不要怕,30岁以后不要回,就比如说我干it干到30岁了啊,比方说啊,我后悔嘛,早知道我早点转换,转转型或者转行什么的,那叫什么的loser,明白吧?啊,说白了就是什么,那早之前你干什么的,人生是要做事前诸葛亮,不能事后不一样啊。哎,所以说这个时候呢,真的只要有机会,即便到现在,你们后面是不是还有他杜甫啊云计算了。
17:00
些课程,有种机会跳跳进去干啊干,为什么一个字真的不要怕,因为这这年头就是么,撑死胆大的说饿死胆小的呀,这种机会不是每个男生都有哈,那真是干不出来,起码我见识过呀,他拖1万步说就像我原来鼓励,那么咱们说当然也有有些学生确确实实呢,超过了自己的最大的负荷,那么确实那个要求也高,因为什么你直接出去外面跟人家要15K,那老板还会跟你客气,老板敢给他也真敢接,但是这小小子呢,就是属于那种,我说的是玩的就是胆大,你知道吧,这个这个这个真的是就有点类似于,就是有些时候,就是男人打天下的时候,除了你的学识,样貌,才华等等这些有关系,但有时候这个胆子还有这种气质,还有这种精神是更重要啊,我就敢打敢拼,那最后的干嘛呢,去到第一天以后彻彻底底的话呢,干了大概,反正他也是硬是撑到了差不多两个多月,这两个多月也确实蛮辛苦,那拖1万步书的话,他居然把整个。
18:00
公司那套云计算那套架构摸了个门清,我干不出来,但是我去下一家公司面试,我说不是说的跟真的一样啊哇,下一家搞好开心啊,这是什么?你这一家挂了练级没通过,但是对下一家而言,你是不是在上一家已经什么练过级啊,我来摘桃子了是不是啊,所以说不要怕,长远来看你任何精力都不会白费,只要你努力,只要你拼着命的去干好。那么这边来同学们,我们呢继续哈,冤头债主呢来看一下,那么呢,这边我们呢回到这数123啊好嘞,Market这边inquiry,然后K1没问题吧,Set k2V哎,22吧,行不行,刚才说的是V2V3V4啊好,Set k333K4V不V4吧,好,这边我呢get k3。
19:00
嗯,K4吧,K4是不是新加的好嘞,那么这个时候我们呢,Exec好,大家觉得我这些执行有没有什么问题吗?好,我们都知道K1现在是不是AA呀,AA不能加一吧,没有听说过一把牙刷加一个杯子等于什么吧,是不是,那么这个时候大家请看,但是其他的效果呢?其他的效果二到五这个命令有没有执行成高,那么再不行,咱们get k4有没有值啊,我们第一波我们说过K1K2K3咱们是不是只有三,K4是不是新加的呀?那么言下之意,整次的执行了里面以后,是不是就像我们说的,冤有头债有主,谁错你找谁,其他对的请放行啊,能明白了吗?
20:00
什么东西啊,上面大家请看执行的时候我们赛的K4有没有加进去,是不是全体连坐,只要有一个出错,所有命令通通给我干光撤销啊啊,什么区别,一个是全一个,只要有一条命令挂了,不是什么东西命令一样,命令能不能一样吗?请问get set这个是不是在执行过程当中就报错了,根本不给你机会,明白吗?而这些东西就有点像什么increase来的时候,请问它是加入了队列还是直接像这样就报错了解就有点像我们的加va里面的一样是不是?比如说你要写一个IO,是不是还没运行时前就要抛出个IO except没有任何商量,但是假设你写个特A级等于十除以零,请问需不需要包异常,不需要,那个时候是不是只有运行的时候才知道啊,哎,它这要说明的什么呢?两点,那么同学们,由于你的业务不。
21:00
一样,是不是某些命令他认为危险比较大的,怎么着,是不是还没等你打exec,你在过程当中就丢异常了,哎,就是说哥们这种命令是要命的,因为我们大家知道get和set这个,当然我这是随便举的一个命令,清楚吗?那么这边是不是我是不是我故意要把它用错呀,他的意思是不是先get k30到V3,然后你是不是得给我设进去一个呀,我是不是少了一个,那么这个时候就相当于说你在执行的过程当中,哥们这种错是犯不不能犯的,我为了保证事物我只好是吗?你还没打exec,我就抛出来告诉你我挂了,明白了吗?好,这个时候大家请看,但是这个我们大家知道,你们也都明白,K1现在是不是AA啊,AA一个是英文,英文加数字是不合适啊,但是有没有报错,甚至一直到最后这个一的是不是他才知道,那么就像我们说的该错的哥们,他说的分是不是非整数。
22:00
范围啊,但是其他是可以的,你别影响其他的,明白了吗?所以说它有两种,那么也就是说对于这个问题,Red是否支持事物,你应该怎么回答,只应该说对事物的支持是吗?是部分支持,明白了吗?因为我们大家看到他,他是不是不像欧口那样绝对强移致性啊,后面这个冤头债主他知道是不是对的,我犯行错的,我是不是挂了,哎,谁错你找谁好,那么呢,下面呢,我们呢可以看看watch监控,那么这个呢,也非常的重要,因为为什么呀,缓存里面的数据大家都来改,大家都来拿,为了避免冲突和覆盖,我们是不是要打一定的标记和一些锁呀,那么来第五种情况,Watch监控,先来看看我们的乐观锁,背观锁和CAS t。
23:00
看set是不是先check,是不是检查的意思啊,先检查再动手设置,那么这个是工作中肯定要用得到的,希望同学们竖着耳朵给我听好了,来乐光锁背光锁和CIS的介绍,首先数据库里面,因为re我们说过K加cash加persist,只要代表这种持久化的,是不是偏向于数据库这样一种模式,那么这种理念是my or关系型和非关系顺序通用,好那么这做个简单的小调查哈,知道这个乐关所非关所的同学请举手,好,那么呢,我就我我做这个书,主要是这样的话呢,因为有些同学非计算机专业的哈,可能数据库系统概论这种书呢,啊,没有那个学过这门专业的计算机的看家的,这门课我就讲细一点,好,我们来看一下什么叫悲观所,首先。
24:01
顾名思义,悲观所的意思是什么呢?就是说我对这个事情的发展很悲观,我认为是一定会出事儿,一定会有问题产生的,我是不是就是一个悲观情绪啊,那么这个时候我为了出事,换句话说什么呢?我呢把整张表呢怎么着都给你锁了,来我们这儿呢,画个图哈,其实说白了,悲观锁啊,乐观锁啊,有点像我们买色Q后面的什么函锁和表锁有点类似,那么先说含表锁,再说非乐观哈,那同学们都知道,一致性和并发性是不是要存在冲突,就有点类似于,比如说就有点像哈,世界上的事情永远都是这么符合哲学,和阴阳相悖的,你要想活的时间长,你是不是就要动的就比较少,所谓生命在于静止,比如说你像那个龟是不是好,那你要想活的精彩,这个时候。
25:01
你是要激情四射,你需要燃烧自己,比如说那个蜡烛,对不对?但是这个世界上你很难是找到又像乌龟活的那么长,又能像蜡烛活得那么爽啊,活的那么精彩的,是不是啊?那么换句话说,这样就导致了我们的什么寒索和表索,一句话并发性和什么一致性的一种二元对立。好,大家请看目前我这儿是不是刷一张表啊,那么刷张表以后,那么来这儿是不是一条一条的记录啊,好,那么呢,这儿有一条一条的记录的时候会有这么问题,表锁呢,就是我对整张表加锁,那么言下去就是此时此刻,现在是不是只能允许我一个人改,有点类似于我们旁边的卫生间,你进去的时候要你把门一刷,我是不是只能在外面排队啊?那么这个时候,那么请问你呢?确实安全,是不是只有你一个人在使用啊?整张表都被你锁了。
26:01
但是大家知道,假设这张表只有两条记录,那么好说你所整张表无所谓,假设这张表有20万条记录,哥们儿,你是为了改第173条你占用的这条记录,但是你却把整张表锁了,我是要改六百五十五行记录,本来吧,我跟你并不冲突,但是你把整张表锁了,我是不是只能排队?随着后面的积压越来越多,越来越大,那么这个时候你又锁这张表,咱们大家都能排队。假设这个卫生间从二楼排到一楼大门口了,你说老头能坐得住吗?是不是得马上得去修厕所去了,是吧?好,那么这个是夜锁啊,这个表锁啊,整张表锁好,它的靠点是什么?并发性极差,但一致性是不是最好?好第二种,那么大家商量,这不行啊,你一个人占一个卫生间是吧,那么好,你明明是什么用的,是第二号记录,我要改第73号记录,我们能不能试试函数。
27:01
这样是不是加锁的力度范围就小啊,诶那么这就是含表锁哈,当然更进一步的夜锁间习锁呢,我们在买斯克高级那门课呢,再去介绍,那么这些就是面试中必考必问的,坦白讲就假设你现在你不听后面高级分的课,你跑去找工作,一问垮一个,一问垮一个,人家就什么8000,要不要你觉得那我不止8000,然后你还觉得是什么,你呢,恐怕呢给能能收你就不错了,因为后面那些优化的事儿哈,好那么这回到我们那个悲观和乐观,有这么个情况,咱们大家呢是这么干,悲观呢,我呢就一定认为出事一定会有人改,所以说这个时候我为了什么杜绝呢,我们呢,或者这是悲观就是认为一定会有人改,是不是啊好,那么乐观的认为呢,上啊,没事,我认为我的数据呢就不会被修改好,悲观锁把整张表锁了,乐观锁呢,我不锁整张表,那我怎么处理呢?那假设你要说你你那么盲目的乐观,所谓的不怕1万就怕万一真有人改了怎么办呢?乐。
28:01
班所呢,想了这么一个办法,既保证高并发,又保证不锁整张表,他是这么干的,它的每条记录的后面就加一个version,一个版本号这么一个字段,好,那么这哈啊这些我就不再详写了,行不行啊,同学们啊,就假如说哈,这是不是咱们的ID,那么呢,中间呢,我呢就一堆省略了好不好,什么ID啊,名字啊,微信号,生日啊那些不废话哈,那假设哈,我现在干的活呢,是这我用乐观锁,乐观所是常用的啊,我用一个version version是不是版本好有意思啊,现在是这样的,张三这个程序员呢,我要去改这条记录,改任何记录之前,你们在副面表单上是不是打一个单选,一个切割box这个复选框,勾勾勾点号,这个勾勾是不是下面有个修改按钮,那么相当于说是不是传着这条,比如说update。
29:01
啊,叉叉叉,然后的话,Y要ID等于13 13号记录没问题吧?好嘞,那么这个时候换句话说,修改任何操作之前,你是不是要按照ID先把这个数据库里面内容给我查出来,好一查出来时候,假设现在数据库里面这条记录的版本是一,没问题吧,好,我呢,查出来以后我就去改我的了,李四这个程序员呢,就比你慢0.2秒,他也要去改这条记录,比如说中间是不是有省略了很多,假如说你要改QQ号,他要改微信号,你们两个的业务是不是各改各的,当时说不都是操作同一条记录,比如说现在我们所说的第五号记录,那么这个时候张三拎出去的版本是多少,是不是一,李四拎出去的版本是不是也还是一啊,好嘞,那么这个时候请问你们两个人提交不会是撞车吧?好,那么假设现在这种情况,是不是大部分时间是一个先。
30:01
再前一个现在号好,那么这个时候李四呢,先与你之前改完了,改完了以后呢,啵,一上去他要干一个事儿的是在这条五号记录的这个什么版本上,前面原基础上加个一,把这个版本号改为二好,那么李四是不就收工了,我干完活了,我牵出来的版本是一,我修做了我的业务修改第三步我卡密提交是不是给我的版本号从一变成二好,那么这个时候张三改完了,因为张三是去改微信号,李四是去改电话号码哈,这个时候张三一提交的时候,那么我发现我的版本好手机,但是服务器上现在最新的是不是二了,不好意思啊,我一提交立刻爆一叉,那么需要你干嘛?不好意思啊,哥们儿,张三李四已经在你先改了,你现在给我先把李四改好的那个最新的拿到手上,是不是这个时候报了异场以后张三就知道本次提交。
31:01
不能操作,我需要重新去送数据库里面干嘛提出来版本号是二的,然后再修改,然后再往上提交,那是不是不会影响到李四也可以顺利的提交我的了,哎,这个就是是吗?乐观锁好,那么这个时候张三最终从二这个版本拽下来,嘎巴嘎巴啦又改,那么假设又有人提交成三了,怎么办?他依旧报错,明白吗?一直改到你成功为止,明白那你没办法,你不能去覆盖别人的,否则本来人家李四辛辛苦苦的把手机号码从电信的改成联通了,你又改回去了,那你们两个是不是已经到下面的话就是什么血雨腥风江湖夜了是不是啊,实际就是是吧,不能说抽抽刀所直接说拿着本子最砸了对吧?好,那么呢,这个呢,就是我们的乐观所和悲观所的简介,简单来说就是什么?呃,什么是悲观锁,什么是乐观锁?第二个重要的工作中用的是什么锁,一般都是用乐观锁哈。另外。
32:01
因为现在你们呢,出去外面并发现这个问题时,一定要什么解决,面对和考虑的,换句话说是什么,如果有机会是不是可以学一下JDK1.5以后Java u con里面那个并发包那些东西啊,说白了,你们对现成的要求可真的是比我们十年前那些的话高多了,明白吧,永远记着哈,如果谁要是敢跟你说Java就是不就是对着一张富文表单登上改查下面套个分页嘛,你就不用跟他聊了,好吧,他那点水平也就是一年工作经验,OK啊,Java东西多呢,比如说像你们的有个什么Java net soet那种网络编程讲过吧,啊,那些东西,他深圳这Java在网络上,其实他是没有网络语言嘛,但他是他的强项哈,只不过多年的这个Java一起开发,搞得很多程序啊,错误的认为啊,Java不就是做网站的嘛,做上表单是吧,那不是这样的哈,东西多呢,等于说到后面结合这些数据库的这些东西哈,好那么呢。
33:01
结合前面的漏悲观了以后,我们呢,简单的来看一下,请同学们呢读一下哈,这是不是悲悲观锁了,我很悲观,我认为我每次去拿数据都会有人跟我作对,所以说为了害怕,我是不是每次都上锁,一上锁是不是把整张表锁了,整张表锁了以后,你当时一致性安全了,并发性性能是不是急剧下降了,好那么所以说这是悲观锁,但是同学们不是说悲观锁不能用,假如说你要真需要加锁,比如说你在需要在数据库备份的时候,我是不是希望把表全部锁了,这个时候别让人改,我先备份完了以后是不是再开放啊,那么夜深人静的时候,可以加上面一把背关锁,明白好,那么再看乐观锁,我很乐观,是不是每次去拿的时候都认为别人不会改啊啊很傻很天真的走到这儿是吧,之后的话他会不会上锁会,但是呢,更新的时候我们是不是。
34:01
要有一个version,一个版本号的机制啊,刚才那个version叫版本号,那么简单一句话,如果别人问起你乐悲关锁的话,这种东西你就记着他的策略,是不是提交的版本必须大于记录的当前版本才能执行更新啊,哎,就这么一个东西,好,那么呢,现在呢,我们呢,来看一下哈,我们的这个watch,那么呢,为了讲清楚watch呢,我们是不是需要讲清楚前面的这些什么乐贝关锁呀,好的,那么现在呢,我们来初始化信用卡的可用余额和限额,简单来说同学们都知道都用都用过这个信用卡对不对,我这这个月我刷了十块钱买了一碗面条,下个月我是不是要还十块,言下之意之意就是我这边的正常的债务增加了,下面的欠额是不是也要增加,好嘞,那么这个是不是绝对,你又是不是花了明天的钱做了今天的事儿啊,下个月还那么好,那么来吧,我们呢,Set。
35:01
Balance,假设我这底价是100块没问题吧,那么这个时候限额是不是零啊?能理解我意思吗?就是一个值初始化,假设我现在这这张信用卡,我可可刷的余额是100块钱,我还没用的话,我是不是不欠银行钱,我的欠额是不是就是零,那么换句话,待会我要是刷了一碗面条20块的话,那么我这个balance是不是变80啊,但是我这个这个的de BT的这个什么这个欠额的话,是不是要变20啊,他们两个是不是应该放在一个事物里面一起成功一起失败,这么说能理解吗?OK,继续往下走,那么来同学们,我们看一下,现在我们是不是先监控再开启啊,什么意思呢?哈,好,Kiss余额限额这两个值有了吧,那么我们关心的是不是我们的可用余额,你要是钱是零了,你还能不能刷,肯定是余额不足嘛。
36:01
那么所以说什么概念呢?Watch balance,好我监控着,然后呢,开工这块是不是Mar,那么呢,这边是不是balance啊,我这就减20块钱,我这减了以后,那么我的限额是不是要加20,好那么这块EX1,那么大家一执行O吗?没有任何问题吧,我监控,换句话说,中间有没有人加三给我改了一道,没有吧,好好,那么同学们看。
37:01
现在大家请看我的可用余额是不是80块钱,右边是不是又来了一个嘛,就比如说你的余额,你那个叫什么呢?你的好哥们或者你的女朋友呢?知道你钱不够花了,是不是借了你钱或者什么,反正就把你充了,那么这个时候是不是在我在刷卡之前有人动过了?好那么这儿大家请看这儿哈,那么现在是不是我做到这儿是保证了两笔金额变动在同一个事物以内,能理解这意思吗?好,现在我们来看哈,有加塞了,所以有加三,就是我在改之前有有人横刀夺爱,横插了一杆子,半路杀出了个程咬金,能理解这意思吗?来同学们看哈,那么我现在是不是依旧watch监控我的balance啊?好,那么这个时候大家请看我这个是不是第二个线程,另外一个终端哈,那么这个时候get balance啊。
38:01
写错了,诶好,我吓到我了,我说怎么就你要是报个零嘛,都认我是不是空都出来了是吧?好,那么这个时候大家请看,那么这啊,我们大家都知道是不是我监控着balance的时候加了把锁是吧?监视着它这边我set balance,比如说我呢,一口气呢把它变成了800,能理解这意思吗?好嘞,好,那么这个时候我market好开始,那么这块时候,那么大家请看哈,我呢依旧呢,还是想干的事儿呢,比如说我又刷了20块钱,又吃了一碗面条,没问题吧,那么这个时候大家请看,我呢,是不是又要增加这个债务20块钱下个月吗?但是我并没有知道别人已经把这个账户已经改成了800了,明白吗?好嘞,那么这个时候大家请看我已执行执行成功,是不是正常执法。
39:01
回现在跟你说这个事物是什么,那是失败的,那么好,我迅速就会看到什么是不是800了,OK,那么换句话说,这种失败以后,就像我们刚才所说,就像是那个乐观锁一样,我是不是要重新把最新的值摘出来以后再进行修改和提交啊,好,那么这个呢,就是纯命令的,别着急,我看到各位同学的表情包了,有一部分同学明白了,有一部分同学还没明白,没有明白的话,我一定让你们明白,最后给你们补刀的时候,我是不是还会用Java给你们讲一次啊,啊,放心哈,你们所有的问题在任何一个班都经过那么反复的迭代,讲到这儿我非常清楚,你们班现在能明白这个事儿了,六成的人,剩下那40%同学不是说是脑子笨,不是说是没有用功,没有用心的听,而是什么理解上还是觉得为什么要有这个watch啊或等等,那么待会儿我们用最后一节课的时候,用Java操作减edit还会转战这个case来给大家。
40:01
说明好不好啊,这儿呢,先听懂,好那么来我为了避免反复的反复的窗口切换,我就现在直接在这边操作,清楚吗?那么我们现在是不是还差最后一个关键词啊,谁啊,是不是an watchch啊,能理解吗?好,那么来同学们往下走哈,现在我get balance,我是不是怎么又写错啊,写错了好这个时候是不是这个是没问题了,好那么我们实际工作中怎么做呢?刚才我们看到那块正常是不是第一次成功是八十二十,第二次中间有个加塞的横刀夺爱插进来把我改了,我卧室监控检测到你这个加在balance上,这把锁检测到有人改过了,我再去提交整次的事故是不是就失败了,那么好,所以说我们这是不是balance啊,又来一次啊好,那么这个时候呢,那么这set balance。
41:01
那500,请问这个是不是在卧室之后又有人动过了好呢?那么这种时候我能干嘛?只能是什么on watch好,那么这个时候看好了,然后呢,干嘛呢,我们呢,这边啊,Watch我就放弃,然后我再watch,一直到什么我成功为止,明白吗?比如说我set balance好,正常来说刚才我们是不是应该这个是80块钱好,那么这我们可以先看看这边哈,Get balance多少好,是不是我们这边的已经又被别人改掉了好,那么现在我们说过了,好,我已经知道别人改了,我是不是就放弃我本次的监控啊好,重新来过watch balanced,现在还有没有人跟我插手了,好,那么get balanced80set d BT欠额是不是?
42:01
20EX1收工O不OK,那么好,那么别人就在查看的时候,是不是80啊好那么呢,所以说这就是什么,如果说你的记录在你首先要改任何东西,先给我加速watch上,我盯着,因为我是不是要保证这个版本要对呀,否则我们是不是反复提交是我把你的覆盖,你把我的覆盖是不是就挂了,那么这个时候就是我盯着好,我去做我的,没有人改算我命好,我一次性操作成功,有人改怎么样啊,不好意思啊,这个时候我就报异常,报一常以后我收捕捉到这个异常以后,比如说我这么个方法,他return返回是force的话,我捕捉到了以后怎么样,是不是只好要重新来过呀,把最新的记录一定要从缓存里面拿出来才能改,否则就是变成什么你把别人的改了,别人的把你的什么呀也改了,OK好,那么呢,这个呢,就是我们的on watch,那么呢,这注意哈,现在讲到这儿回过。
43:01
来看我的命令,他说什么监视,刚才我们是不是监视一个T,如果在事务执行之前,说白了就是ex ec之前了,这些key是不是被其他命令所所所改到,那么事物将被怎么样?哎,所以说知道为什么我左边那个窗口那次旁边有个balance把我改成800以后,是不是在我提交之前,别人已经先改了,我本次的操作就挂了,理解再来看这安watch是不是取消watch命令,对注注意是几个key,哎所以说这些词你别看它是几句话,很多知识在里面,好,那么呢,回顾了前面的以后呢,我们呢,就要明白,一旦执行了按watchch和ex以后,之前加的监控所都会被怎么着,哎,就是什么,就像财务报销一样,你这笔账是不是就清了,诶不管成功失败,你是不是就清了,你要玩哥们从缓存里面摘出最新的数据,再来一波,直到你成功为止。
44:01
OK,好,下面呢小结一下,来看看watch的指令类似于什么锁很好,事物提交的时候,如果K的值已经被别的客户端修改了,比如某个list子等等哈,那么怎么着?刚才我们也说过,整个事物的队列都不会被执行清楚了吗?再来通过watch命令在执行加了多个key,那么倘若watch之后有任何P值变化,那么执行的时候是不是都将被放弃抛异常啊?那么这个时候我们将会返回应答,你通知调用者哥们儿,你这次事务执行失败,我们我们看看报了异常哦,握室监控了以后,别人在我之前动过了,OK,干嘛再来一次,把最新的数据拿下来,再加上我的业务明白了吧?好,那么呢,这个呢,就是我们的red事务正常执行,放弃事务,全体连坐烟头债主和公式监控。那么来看看我们来事物的三。
45:01
阶段给大家呢,简单的做一个小结和复习,开启入队执行没问题吧,好,请同学们呢,花十秒钟默默的背三遍看背下来啊好三个特性,那么来,首先就像我们刚才所说的,是不是单独的隔离操作呀,什么概念呢?就是我们是不是加到一个queen,一个队列里面,各自就是排好队,就跟一个什么就有点类似,是不是就像是什么,每一个命令就像是一个冰糖葫芦,这个队列是不是跟那根签子啊,是不是我们被串新换串一块一口气去执行送到你嘴里啊好,那么这边哈,再来看单独的隔离操作啊,他有没有数据库那些什么隔离级别的概念,没有哈,这个是no,不是我们的传统的RDBMS,光数据库那些什么隔离级别单独换那里是不是没有啊,那么最后。
46:01
保不保证原子性,所谓的不保证原子性是不是部分支持事物呀?哎,所以说我们说过这边的话,我们说过的话呢,是我们是不是说过全体连坐这个case啊,只要有一条命令执行失败了,其后的命令仍然会被执行,是不是也有回滚呢?那么换句话说,源头债主和全体连坐这个是不是就是它不保证原子性部分支持事物的一个展现和说明啊,OK,好,那么呢,这个呢,就是我们red的事物的相关介绍,OK,那么呢,咱们呢,第一节课呢就到这,大家呢休息一下。
我来说两句