00:00
好,各位同学,开工。接下来我们先来说大K问题的一个分支,末K一句话。你如何往right数据库里面一次性的写一个小脚本,插入500万、100万、1000万、2000万条记录,插入以后,对于在生产上千万级别的red数据,你如何便利?那么T新可以用吗?OK,那么咱们呢,就来看看这样一线的工程经验和实际的案例,那么听好。杨哥讲了说了,你要会用,注意啥东东,是不是说过一个东西叫学以致用,啥意思啊?希望各位同学第一个案例你收下照着做一遍,第二个行写进简历里面,你干过什么,面试的时候也主动的跟面试官说一下,OK,别让杨哥呢白费心血,对吧,整天只会打个完结散花,所以呢,各位亲,坚持下来,跟着来。
01:09
这些案例。100%是精心准备过的,那么大家熟悉严格的风格的骨粉都清楚,管生又管养,管杀又管埋,所以下面的全部案例既可以陪你东山再起,也能陪你风花雪月,请同学们一定跟着来,多动手,OK,听懂的请我扣一个666,谢谢,来吧,同学们。人到的差不多了,开工首先大批量的往right里面插2000万测试记录啊,由于杨哥这个机器呢。2000万我插过,实在是拖的不行了,所以说呢也非常耗损我们的虚拟机,改吧改吧,我们呢,两步写个LINUX72脚本,差100万来,弟兄们请看现在我。
02:00
DB size多少条记录啊,零条,你也可以测试测试你机器的性能,差个100万大概耗时多久?来吧,我们来这个脚本呢,也非常的简单,前面我们的Linux里面都说过。就这么一句话,我这有个负循环,这是1万,100万干嘛100万字啊,DOE,那么这个呢,相当于SIM print加法里面的啊,近似的理解就写SK1 V1 K2V2,一直到100万V100万,然后这个是不是相当于类似于追加,追加到哪呢?追加到我们的time,塔,Red test ts里面,然后但OK,好,那么各位同学先看一下这个脚本啊,各位同学,这就是一个追加,相当于说这个写进这个。路径下面这个文件里面搞定好,那么同学们直接拿过来,然后呢,我们呢,在Linux里面执行一下。
03:05
好,稍微等他一会儿,那么现在他要做的事情是写100万条记录在temp临时文件夹下面这个路径里面,我先暂停一下录屏,各位同学看,没有消息就是好消息,成功完成我们对应的脚本文件的编写,OK,以我的机器吧,大概十十多秒钟的样子啊,那么各位同学,那么大概呢,你自己呢,测试一下你的好,那么下面摸,注意啊,这个时候你就不要用cat,要不然屏幕上打出100万条记录真的也是耗耗费时间的,那么我们呢,Temp路径下面的red这么一个东东,OK。这么说能跟上,那么同学们这些东东的话都会吧,那么比如说大家请看我不停的往下翻,那么这个呢,是一行一行的过,一页一页的,对不对,那么这些呢,末命令,那么大家呢,可以看得出,基本上大致呢,就写了这么K1023 value1023,类似于这样一个记录,OK,好,那么更多的,由于它100万啊,太长了,我就不再全面铺开,只是从这可以证明。
04:08
我们写好好,下面脚本写好了,怎么把这100万条记录灌进我们的right数据库里面呢?我们来前面还记不记得我们学过一东西叫管道派,那换句话说就是现在100万装箱集体打包带走,没命令呢,也很简单,搁到这,那么同学们请看这个呢,是cat,那么下面说1CAT是不是就展开里面的全部内容,然后这是一个竖线管道符,所谓上一个命令的结果集,作为输入参数传递给下一个命令,那么下一个命令就是我们的安装路径啊,OPT,那么你可以不写这个,那么直接拿过来就是red client哪台机器。本机哪个端口6379哪一个密码,这个干嘛派,OK,说白了,第一波命令写100万个set k11,一直从一到100万。第二个把上面。
05:07
这个文件内容的读出来,作为一个输入的上一步命令的结果及作为输入参数,给它直接用派命令灌进去,好,那么同学们,此时我们呢,来执行一下我们的这个命令。好,那么可能也稍稍花点时间来,我们稍微等他一会儿,各位同学,大概杨哥这用了呃,五六秒钟,100万成功灌进我们的red数据库里面,那么接下来啊,那么同学们。有没有呢?OK,如何,没问题吧,那么get k100万有没有将将,好吧,Get k1V1 OK,所以说这个脚本,这个案例就保证你以后自己去做测试的时候如何往RA里面做数据的压测,那么这两个脚本非常简单,那么同学们可以照葫芦画瓢自己处理一下,当然我这是用此中类型的set,能不能换成别的命令,什么l push啊,哈希set啊等等,就看你自己如何改造好了。那么同学们玩活这个就是我们大批量的往里面插入了100万测试数据的key啊,200万我的机器实在受不了,那么同学们多多包涵,那么100万照样能够把这些东西讲清楚好,那么接下来就要看看以前我们玩的是过嘉奖,哎呀,可能十条20条记录现在有点样子了,上100万了,那么请问kiss新这样的命令你还敢乱用?
06:44
啊,真真正正百万级千万级,就像MYSQL数据库一样,你还敢select can't吸引某张表吗?OK,好,带着这些问题,我们下讲来给大家看一下什么叫真实的生产故障?为什么生产上不可以用kiss新?为什么要把这些危险命令?
07:05
做一下处理,防止误删误用。同学们不要走开,我们继续。通过上一节我们插入了100万的测试数据,那么接下来就要看看任何事情都是量变引起质变,那么在大数据百万级别这样的数据下面,以前那些招还管用吗?如果你随便乱用,会导致什么样的生产故障?那么同学们来看一下真实的惨烈教训,来先看看。最近安全事故频发,前几天发生了顺丰高级运维工程师的商户事件,那么下面又看到PHP工程师在线执行了危险命令,导致某公司损失多少400万?大家可以看一下,干出了生产上400万,而且还是大名鼎鼎的顺丰,顺丰的派件优不优秀?这个不用我多说了,100%大数据,所以说你玩这些东西一定要去大厂。那么什么样的命令会有如此威力,造成那么大的损失呢?那么是某公司技术部发生的两起本年度注意P0起特大事故,造成公司资金损失400万,原因如下,巴拉巴拉。
08:13
操作上限执行了这样的命令,当然啊,这个时候呢,省略导致red什么锁住,导致CPU飙升,引起所有支付链路卡住,十秒结束以后,全部请求干到red数据库当中,数据库产生了red雪崩。数据库发生了严重的宕机事件,那同学们这个基本上是可能是从CTO到开发人员,从头录到尾,整个技术部的奖金少说。蒸发掉一半了,OK,好。直接开,如果再犯类似事故,直接开除之后会逐步收回运维部各项权限。那么为什么线上的危险命令没有被禁用?好结论,生产上是不要去写这些危险命令的。那么下面我们大家都清楚,对稍微有点使用经的人都知道,线上是不能执行case新相关命令的。
09:06
那么数质量大会导致专体锁住及CPU飙升,生产环境中建议禁止或者是重命名,我的建议是就直接禁用。好那么兄弟们我们来测一下,那杨哥你这不有100万吗?那我头铁,反正我自己测试环境,我们来试一下,大概录一遍100万个记录,Kiss心ready大概需要多久?好,那么同学们。慢慢等待,我先暂停一下录屏,那同学们大概多久?8.46秒,那么你每次的数据不一样,甚至网络的情况不一样,将会导致时间会更多的飙升。OK,好,那么来看一下,我有一次做测试,直接替心干到了33秒。OK 100万的数据,那这个时候大家请看34秒,那么当然flash db100万的数据多少秒,接近2.16秒就给你全空了,所以说是kiss新什么flash DB flash这样的命令在生产上是绝对绝对不要用了,你近100万的数据很困难,一个flash db3秒钟左右基本上就全部毁了,OK,所以。
10:19
K含发DB等等这样的命令啊,它是有致命的弊端,在实际环境中最好不要使用。上一章啊,我们说过了,Right是单线程还是多线程的入门篇,我们说过这么一个动作。同学们还有没有印象就在这儿?Red呢是I多妇幼保证连接那多线程红利,但是单个工作线程保证线程安全的话,它是高性能,也就是说你单独在执行一个命令的时候,它是原子的,那么这样会导致的问题是什么呢?新它是没有offset偏移量或者limit的参数,是要一次性的吐出所有满足条件的T,那么由于red是什么单线程的所有操作都是原子,那么我在这kiss新的时候,别人要来操作red,因为red不可能只有一个人用,那这个时候是不是就卡了?那么T心变列全部撸一遍,时间复杂度on,那么。
11:19
如果是千万级别的key,那么这个指令就会导致red的服务卡顿,所有读写red其他指令就会被延后甚至超时报错,就会引起缓存雪崩甚至宕期,那么这个就是什么顺丰当年报的这个故障为什么这么严重,损失了400万,直接是什么数据库产生雪崩啊,挂了,用我们的话来讲,你可想而知啊,挂了全部打到我们的MYQ上面,这种多么恐怖的一个生产故障,OK,所以呢,兄弟们,我们呢来明白了,生产上是不可以用T星这样的危险命令,那么自然而然如何规避呢?
12:01
生产上如何限制K星flash TVB flash等危险命令,以防止误删误用呢?OK,那么这个是非常有现实意义的,来吧。要通过。配置设置禁用这些命令,那么我们在red看在scar这一项当中来进行配置,好那么下面同学们开高首先啊,来大家看,由于待会呢我要去重新去修改我的red这个命令,那么要重启机器才能生效对吧?所以说现在大家请看啊kiss新大家请看现在是不是会自动提示出来,好,大家再请看啊flash。大家看是不是会有自动提好flash DB,大家请看是不是会有自动提示,OK,那说明什么?现在这三个生产上,对于百万级别以上的生产数据库,它是畅通无阻的,是可以使用的,那么下面我们为了生效先直接下扯蛋。
13:10
退出我们的red服务器,回到我们的red,直接是vmred7.com来,那么同学们,我们找到啊,我们的这个security安全这个配置项啊,大致呢,马上到了吧,应该好在这OK,那么在这做一个安全性的配置啊好,那么同学们。走,往下翻,在这儿给你说了一个。请看它呢,有一种一种可能去完全kill a command by into a空的子串,也就是说假设你对哪个命令要禁用,接给它配成一个空串即可听懂。好,那么同学们,我们呢,直接拷贝三个,这三个怎么用呢?
14:13
假如说啊,他注释的我不敢动啊,我们就直接过kiss心我不可以用,然后呢flash DB我不可以用,然后呢,Flash or我们可以用空格,一个空串,直接按照提示来操作就行了,然后保存退出,OK,这个配置文件我们单机版的RED7点看。改造完成,那接下来同学们请看一眼,直接连上来,OK,大家都清楚,我在修改配置文件之前,什么kiss新啊,Flash DB啊,Flash啊是完全可以自动提示写出来的,那么现在我们修改以后来看一下,那么大家请看,诶,我key我没有打那个S,我按table键根本出不来,好自动自己写完kiss心告诉你不知道的错误的命令,好再来flash,诶,我按table键没有效果DB大家请看不OK,那么flash不按table键没有自动提示回车,OK,所以说如果说人家来问你,你们在公司在生产上有没有做过一些危险命令的禁用操作,误删误用如何防止?如果你这个答不出来,那我认为贵公司你们对red的认为和使用可能是牵。
15:39
一个档次的,这是真真正正需要避免的生产故障,你一不小心就是个flash flash DB,整个数据库就清了,这是很恐怖的,所以呢,各位同学,当然啊,我希望屏幕前的你不要说啊,这是运维的事。艺多不压身,现在运维都转开发了,Develop开发加运维,OK,所以说呢,各位同学,你如果未来想成为CTO。
16:04
技术经理,架构师,多学技术,多积累自己的工程经验,因为知识只有质量,没有重量,压不垮你的,学到就是赚到,OK,跟着杨哥来信,杨哥得永生那所以说弟兄们过来看一下笔记。在我们刚才的安全这一项目当中,做这样的一个什么可以把它rename it into a空串就代表禁用,那么刚才如我们所愿全部把危险命令禁用,哎,这样,那么新人来了,小白来了,就不会出现商户跑路这样尴尬的局面,OK,好,那么同学们,这个就是在生产上如何限制威胁命令的使用。上一讲,我们学会了如何在安全配置下禁用kiss、新flash DB等等危险命令,防止误删误用。K星,对于百万级别,千万级的是绝对不能在生产用的,你要便利,一用就会卡顿,那我就是想便利还想避免卡顿,那假设现在你给我查十条记录出来,查20条记录出来,按照大厂的面试题某一个固定前缀的key给我。
17:16
迭代一下撸出来,那咋整呢?又不能用kiss心,所以这个时候同学们,那么我们该用什么呢?我们要用的东东,那么也就是我们的新命令在扫描命令登场这个。英文这个中文一句话类似my limit,但不完全相同,我们先来知道它是什么,大家请看这个呢,是我们的英文这个命令啊,他就告诉你这个SKY命令呢,和与之相关的命令呢,还有h sc Han和ZSC什么意思啊,这个SC叫扫描迭代,它主要的作用干什么呢?用于迭代数据库当中数据库的键,哎,那。
18:02
这是针对于最经典最主流的谁string类型,那么就看这个,那么大家都清楚,那么100%就是我不说你也会明白它是针对谁set,那这个呢?那么针对的是不是我们的哈西,那么这个呢,是不是针对我们的所体的set,也就是z set,哎,也就说这个和这三个一加三是一组的,哎,都是针对于我们这样的大数据集的类型的迭代器,OK,好,那么过到这吧,它就直接告诉你了,分别是干什么的?好,那么它的语法就是scan course游标,那么中括号,这是可以省略干嘛匹配的。表达式和cant,这个cant相当于我们的limit ma的limit默认是十条,不写就是十条,否则是多少就是多少,OK,好,那么同学们,我们来看一下,那它的语法是什么概念呢?
19:01
我们先说人话,再带大家过一下官网,然后再给大家做案例演示。首先请看公式,就这个SC。扫描,然后游标匹配的表达式和探T计数器,基于游标的迭代器,这个主要针对于string类型,需要基于上一次的游标延续之前的迭代过程,也就是说上一次的返回游标是多少,我下次要接着继续用它以零作为游标开始一次新的迭代,好,从零开始啊,直到命令返回游标零,完成一次变裂,就是从零开始,始于零,终于零,这个游标两个位置相当于说便利了一瓶,迭代了一瓶,不保证每次执行都返回某个给定数量的元素,诶,数量不一定哦,它迭代可能会有遗漏,支持模糊查询,那么这样是不是match OK,一次返回的数量不可控,只能大概率符合count参数,哎,所以说这个呢,是对kiss新的一个大数据下面一个补充,但是它并不完美,好,那么这个时候呢,那么同学们我们来看看啊,这些呢,是啥意思呢,它的特点。
20:11
来。他直接跟你说了啊,嗯,SKY它的基本使用情况是这样的,它呢是一个基于油标的迭代器,它的意思就是说每次调用这个命令的时候,这个服务器将会返回一个更新过的邮标给这个用户,那么这个用户需要用这个游标参数作为下次调用的输入参数,那它这个意思是这样的一个游标的它的迭代器。Starts什么时候开始,这个游标从零开始,所以说大家请看设置的时候,SCAN0迭代一下,然后呢,17,然后默认给你出几条记录,十条记录,哎,这个终结的时候,当这个游标返回的话呢,这个server。IS0,也就是说start的时候以零开始,终极的时候怎么知道它遍历完了一遍呢?那么我从零开始返回,回来的这个游标也是零的时候,我们就认为这个SKY已经全部便利迭代完成。那么同学们先粗浅看一下命令,使用SKY扫描从零开始,这是17给你出了这么十多个键,然后注意下一步的返回是下一步的。
21:27
续接游标参数,然后大家请看,从零开始,它又返回了零,那么代表整个全部遍历完了,OK,那么同学们这个能不能跟上,听不听得懂好了,那所以说呢。他这呢给你说的呢是很清楚的,如果对于官网你还有疑问的,那么同学们回到这,杨哥来给你说第一个他的语法,SC游标匹配的模式,看指定从数据里面返回多少元素,默认是十个,这个命令是一个基于游标的迭代器,每次被调用后都会向用户返回一个什么啊,新的游标,那么来同学们我们就说官网的案例,从零开始返回时期,上一步返回的游标是下一步的起始游标,所以在这用户在下次迭代时需要使用这个新游标作为SC命令的游标参数入参,以此来延续之前的。
22:23
迭代有点类似于断点续传,那么SC它返回一个包含两个元素的什么东道速阻,一个池是游标,第二个池是你这一圈。卡出来的数据,扫描出来迭代出来的数据,所以第一个元素是用于进行下次迭代的新油标,第二个元素是一组数组,这个数组中包含了所有被迭代的元素啊,如果新游标返回零表示迭代完成,那么大家请看,这个时候返回零说明全部搜了一遍了,那么有就是有,没有就是没有了,OK,好。
23:01
那么这个顺便说一下这个便利顺序啊,它不是像MY的那个什么select limit,呃,五零到五多少多少,它不是这样的,它不是从第一位数组的第零位一直变列到末尾,而是采用了高位进位的加法来变利,因为它要考虑哈西槽的扩容和缩容问题,所以它不是按照速组012345这样的,听懂了吧?那么这是一个非常重要的区别,那么来同学们使用,我们大家来看一下,这是公式,很简单,假设现在我只有三个T。我可以用kiss心杠零,那么这匹配假设这是心cant是一来出个二好数据,DB内幕有这个K找到了下一步的游标是下一步游标的入参,那么零开始这个时候返回二,我这写二继续得到一,这是my key,这个K,下一步的游标是下一步游标的入仓,又从一开始得到了K1,那么三个都便利完成,最后返回零都变列过了,没有了,所以说有没有找到你的,我就看主人你。
24:09
有没有需要,不行你再遍历一遍,或者修改数据,好,那么同学们,我们简单的来看一下我们的案例,复杂一点啊,那么假设啊,同学们都清楚啊,我假设啊,M get k1 K2 K3,相信大家。不陌生,那么假设啊,我直接告诉你kiss心。那么这个时候我们的。这个心是不是被已经被禁用了,那么呢,我们呢也用不了,所以搁到这儿,我们scan游标从零开始匹配,比如说我们K7,那么看它假设啊,默认十,我就出15条,那么同学们请看这个时候这就叫游标槽位,我从零开始就可以找。K开头的这些星,看看有没有你要的T,那么大家请看我们呢,15个OK好,那么接下来我们继续使用跟刚才一样,上一步的游标4857458752,那么作为下一步的使用,还是15条来继续找,那么这就是9304,找找找找找,就这样这样便利便利来看看你有没有对应的啊,比如说你肯定是某些什么前缀开头的个K,有没有对应的,这个K能不能找到,找到有就有,没有就没有,一直到它这个邮标变为零,那么就像这个案例一样,告诉你是零了,空了,所以说整个便例完成,OK好,那么同学们,这个就是我们scan命令相关的了解。
我来说两句