00:00
那下面呢,我们给大家讲一个案例,就说怎么去使用这个red的一个案例,它的这个核心代码,我们先简单看一下,我们再写哈,它的核心代码呢,其实就这么一点东西,哪一块呢?就这个就是我们如果要用连接词的话,它必须要满足第一点,就说你在这个程序运行之前一定先要初始化,我们这个po就是连接词,就说呃,我们可以把这个初始化的工作放在init里边去。在这里面我们做件什么事情呢?我们初始化。哎,对,我们初始化我们的这个连接词,然后第二步呢,呃,第二步就说初始化过后我们再去使用,使用的时候怎么关键是怎么从这个链接池得到一个呢,它里面有个非常重要的方法叫做pull get。啊,它这里有个方法叫get,那么从这地方就可以拿到一个链接,拿完这个链接你用完了过后呢,你你用完了过后,诶,它自己可以去回收好,但你用完了过后,你最好把它可以把它关闭一下,对吧,关闭过后它就回收到回到这个破里面去了,那我们简单看这几个参数,各位同学第一个参数啊。
01:10
Max ID,这个代表最大空闲数啊,最大空闲数我先写到这吧,我给大家简单写一写,这个代表最大空闲数。最大空闲,空闲的这个这个连接数。那简单解释一下什么意思呢?就说假设你这个构成去,就这个构成序,一直没有人去用这个连接词,这个连接词里面我最多放八个。啊,当然当然你可以调啊,也可以调,就是我最大空线八个,第二个呢是part at,这个代表什么呢?就是代表最大的这个连接数,代表表示啊,表示这个和数据库,数据库的最大连接数。啊,连接数这最大连接数和这个空空闲最大这个最大这个空闲数不一样,不一样,就是说你这个通过连接尺,我最最多可以跟数据库发生多少个连接,因为还有并发的问题嘛,还有一个并发问题,那么零表示不限制,零表示呃没有限制,零表示没有限制。
02:17
没有限制,就我不限制你啊,理论上我不限制你,但是我写的零不限制,但实际上你系统还是要限制的啊,所以说老师我设个零是不是我的连接数就是无穷大了。他只是说我我这个连接池的这个技术,这这个核心,我不我不去限制你,但是你自己能不能达到这个并发,那你跟操作系统还有很大的关系,跟你跟你这个八还有关系,对吧?你自己才设了八,那那你这个零有什么用呢?那相当于说你我这设了八,那你这是零,那最大最大最大这个连接数也也就八个了,对吧,就说我不限制你而已,还有第这个呢,这个是空最大空闲时间,最大空闲的时间什么意思呢?就说假设有一个连接,就是我们这个连接池里边有一个连接,有一个连接在100秒之内,在100秒里面没有人用了,比如说你上次用了一下这个链接,用了一下链接,然后呢,呃,用完了过后呢,你回放回去,在100秒以内,在再也没有用过这个链接,它就代表什么呢?它就最大空闲。
03:22
然后他就自己又把它放回去,这个最大风险它会自动增长啊,有时候它还自动增长,这个机制就是说它达到一个峰值的时候,它会自动增长啊,自动增长那么在100,在这个最大空闲100过后呢,它就自动的就是就是又把它放到这个空弦链接数里面去了。还有一个这个呢,大家看到这这个是什么呢?就是代表初始化就上来过后啊,就是初始化的一个代码,初始化这个连接池的代码,连接的代码,所以大家看这里面它指定什么呢。啊,这里面它指定我要去连接哪一个IP的哪一个READY4这边他知道指定这个我要去连接哪一个,对是就是连接。
04:08
连接哪个哪个IP的什么呢,这个。呃,Red,那这边要要写清楚对不对,这个local house的代表本地,那如果你是,呃,IP地址是某一个U地址放在某一个IP的,你就写清楚这边是它的端口号,是哪个端口,好,这样子它就给你初始化了这个函数,这个函数是代表呢,从连接池中,从连接池。连接池中取出,取出什么呢?取出一个连接啊,取出一个连接。好,这个在标关闭这个表示什么呢?关闭连接池。关闭连接词。啊,大家注意啊,一旦关闭连接池过后呢,这个就不能再从连接池里面取连接了,一旦。
05:01
注意听这句话,一旦关闭了,一旦关闭连接池了,就就不可以,就不能,就不能。就不能冲。从什么呢?连接池中。再取数据了啊,再取连接,再取出连接了。好,这这是大概的一个说明,大概一个说明,那么我们看一下源代码,苏老师这个地方,这个你说的这个含义我还是有点不太清楚,有没有相关的文档能够把它解释的更清楚更明白呢?可以的,我给大家看一个就是源码,我们打开各位打开我们的这个。我们的这个RA的它的一个插件,找到src啊,Get up里边有一个这个东西,进到red go里面有个red,打开哪个文件呢?显然同学们应该知道打开这个po,因为你是连接词嘛,打开了过后呢,你们可以看到一个熟悉的这么一个东西,好同学看哦明白,大家看到这里啊,你看这里。
06:06
同学们看,这里有个破哦,原来破是个玩意儿。坡是个结构体,看到没有,它是一个结构体,也就是说我们我们待会儿这个对这这这这个地方啊,我们待会返回的这个red点破,它本身是个结构体,所以说你看我这样用的,我返回的是它的一个一个一根指针嘛,返回三指针,那这个结构里面有什么东西呢?大家看,首先呢,它有这样一个方法,就第二,呃第二呢,就是刚才同学们可以看到的这个东西。啊。啊,这个得调,然后呢,往下看里面的一些参数,看这个地方。对吧,那开最大的一个number of,什么空闲的连接,在这个连接是最大的一个空闲连接数,还有像这个看到没有max active,他怎么说的呢?他说最大的一个number,什么connections,最大的一个连接数分配给这个连接词的,在给定这个时间里面,最大连接数如果等于zero等于零,什么意思呢?就如果你设的是零,There there is no limit,就是没有限制on the number of connectionsport,就是在这个连接里面,我就不限制它的这个数量了,它默认是这样子的啊,但是。
07:17
它但是就是说它一个最大连接数的一个问题,好,其他的呢,像idol timeout超时,你看它用的时间是time这个包包里面的duration啊duration,当然还有这个wait呀,还有这个max life time啊等等很多啊啊这些大家呃去去自己看一下就行了,其实一个标准的配置啊,就一个标准的配置,它是它大体是这样子的,我这有一个标准配置。啊,这有个标准配置,大家可以参考,大家用的比较多的,像这种啊八这个呢,可以调大一点啊,如果说你的数据,你的这个项目比较大,你可以把它调大一点啊啊然后这个这个时间呢,空闲时间,比如说你觉得你想空闲时间大一点,你可以调大一点啊这这这个其实就可以啊就可以。
08:06
好,如果你发现你的性能不够了,你把这个数据量适当的调大一点就可以了,好,现在呢,我们来写一下这个代码吧,我们来给他演示一下这个代码怎么跑起来。好,同学们,我们我们来写一下这个代码,做一个小小的演示,还是我们CHAPTER18,然后呢,我们写一个文件夹,叫做ready spo spo。好,同学们现在呢,我们写一个man.go啊同学们,我们写一点man.go来玩一把,玩一把package主包,然后呢,Import,对import,然后呢,首先我们肯定要呃,这个格式,这个format,另外呢,那个路径那个就是引入我们red的这个这个。这个插件的啊,第三方插件的,我们这个路径呢,我就不去不去备了啊,好直接把它放到这里面去,好放到这就可以了,然后呢,首先第一步我们先定义一个全局的,定一个全局的,全局的一个破,这个因为你第一个全局任何一个地方都可以使用到,所以说VR破。
09:12
好,它的类型呢,咱们定义好就ready点什么呢?Poor啊注意这个这个啊好ready,那现在呢,我们初始化它就是当启动程序时,当启动程序时。这样写啊,当启动启动程序时,就初始化,初始化这个连接词,初啊初始化连接词。啊,那么你怎么初始化的呢?就利用我们原先写的这个init函数,引函数呢,是在主函数执行之前就被那个做了啊,就被做好这个初始化这个代码呢,我就省点事啊,就放过来算了,我不去写了。啊,要写的话就是按照这个什么,按照这个文档去填填数据就行了。
10:02
好,我写到这里来。好写完过后呢,这这个就可以用了,怎么用了,来写个主函数来使用它一下。好,我写个主函数测试一下may,然后呢,怎么用第一句话啊,同学们先。先从先从什么呢?这个普池里面,就是普洱里面取一个链接。破。取出取出一个连接,因为你你走到这的时候,其实它这个词里面已经有八个了,就你在没用的时候,至少它有八个,至少它有八个,那你用的时候呢,它会自动增长啊,就是如果说你到达八个不够的话,它还会自动增长,那现在呢,怎么怎么取呢?啊很简单,里面有个poor,它有一个方法,Poor里面有个方法叫get。点盖子,那盖子过后它返回的是个什么东西呢?Connect。这一点大家可以可以看一下手册,你看刚才看这个文档里面,大家看它确实有个get,它返回的就是一个坡,你看为什么我们这要做成这个指针,大家明白吧,因为它这个get是跟这个指针类型关联的,这就是为什么我们在写代码的时候,你看为什么我这是给他定的是ready是指针类型的原因,你不是指针,你看你也搞不定,因为他这个get的方法,他这个get的方法是跟这个指针绑定的,好他这个返回就是返回一个连接,就是conn,这个就是返回我们的连接,好返回这个连接我拿来用就可以了。
11:30
好,然后呢,我们一个differ,你这个动作还是要有的啊,Close。这个延时关闭的动作还是要有你不然的话,到时间你用完了过后,这个连接是不关闭的话,它它回不回去啊,回不去,那你用用越用越少啊,越用越少啊,因为他持有他不放嘛,他不放他认为你还在用,你还用的话,他不会把它重新放这个空闲的地方去,那别人就用不了,也就说你你又没有用,你还你还持有这个连接,那这个连接词就没有意义了啊,大家注意注意这个细节啊。
12:02
好的,那呃,一定要你用完你就把它关闭它回放回去啊,回放回去。好,然后呢,这个地方我们接着往下看啊,接着往下看。好,然后我们接着往下做的就是写东西了,点do,好do,那怎么do呢?我们放一个东西进去吧,Set一下,然后这里我们给它来一个随便放一个吧,放个名字,放一个名字。好,放一个名字呢,这叫汤姆汤姆汤姆猫,猫啊,就写汤姆猫汤姆猫。汤姆猫,OK,汤姆猫,好,这个时候呢,我们就放进去了,放进去它会返回一个什么呢?返回一个这个结果我们不要,还有一个呢,就是返回有没有L,这个要接收一下,做一个判断啊,如果L不等于空啊,不等于尿,那么我们就说这个地方啊,出错了,Print p print,好,我们就说这个do error,对吧,A。
13:05
那么error的原因是什么呢?取出来就可以了,这是第一个,好,当然你这个取出来你可以了,不走了,放不进去说明有问题,好接着往下走,下面呢,我们来取,取出,取出和以前是一样的,仍然是它。怎么取呢?Do do好,怎么do啊取嘛,那就是呃,Get get的时候呢,我就取这个name好,取的时候应该有个结果,RRR好,然后有个L,那这个时候呢,因为我们知道是字符串,所以说我直接就不啰嗦了,Ready ready点是准。好把它转一下就可以了,好转成功,那转完过后呢,我们来判断一下啊,如果这个error等于把这个粘贴拷贝一份。好,这口,我们把这个结果打印出来,看一下format print,把这个R打出来,看是不是汤姆猫。
14:00
好,我们我们输出好输出就可以了,好我们看看现在我们来执行一下这个代码找到。诶,找到我们的代码啊,先把这个关闭一下,这里有问题,对,因为我是从那直接复制过来的代码,所以说他这边可能有些。比较奇怪的字符,所以说我把它清一下。把亲一下就可以了。好走,把清空啊清一下,再清一下。好保存。好保存,把代码我这边挪一下就可以了。好走一个啊,走一个代码。好,我们来执行刚才写的这个代码,看看能不能跑起来,看看我们那个连接词对不对,对不对,好,幺八刚才写的ready po,来走一个CMD。走,Go go run main.go跑。好,我们看看这个连接词有没有成功,好可以成功汤猫取出来了,那么这点我要强调一个细节啊,同学们有一个细节就说,如果说你要从这个连接池取东西,一定要保证这个连接池是没有关闭的,如果这些下面这个代码就要出错,就是如果啊。
15:14
如果啊,如果我们要从要从这个坡里面,坡里面取出连接。啊,取出取出连接一定要保证,一定保证什么呢?保证这个连接尺是没有关闭的。是没有关闭的,你比如说这样子写它就出问题,怎么写呢?比如说有些同学可能不小心写了一个这个动作破点close,好,同学们一旦你做了这个动作,那么这个连接就关闭了,你再去获取东西就获不到了,你看我再这样再获一次,比如我获得一个CR2。好,我把它打印出来,你们看一下。当然你获不到连接,你后面代码肯定都跑不了。你看这个连接是这个东西,你还取得出来吗。所以你如果一旦关闭了啊,一旦关闭了下面就再也取不出来东西了。
16:04
我们给他跑一下看代码,它这边会取得到一个,诶不对呀,取出来了吗?难道。铺店clothes。破盖不对啊。我们看看这是为什么啊,不应该取出来,我再我用,我再用一下看看。不应该的,好,我把这个代码从这复制一份,我刚才不是说他说我取出来了吗?取出来过后我取我用我用我用它一下看看。还见到鬼了,我先把它关闭了,Per关闭了,我再去取。看见没,它会出现出示什么信息啊,好,我关闭了,又回到一个CONNECT2。好,二我看看这地方,它可能有个空分配的一个地址,但是这个地址实际上是指向的一个,因为它是个引用嘛,它可能指向一个无效的一个地方,看一下我把这写到二。好,这地方改了啊,Do了一下,一个NAME2,汤姆猫二。
17:04
好。好大,再看我的逻辑,我先关闭了,把这个连接词我关闭了,再去取,再去取,然后我用取到这个连接去set数据。好,然后呢,我再用这个C2去获取刚才的数据,最后打印出这个结果,这个换成二吧。交换成二。好,现在呢,我们来跑一跑,看看代码真的还能成功吗?跑一下啊,诶这么有问题。这边有一个问题,看看是哪里哦,因为这边已经分配过这些东西了,所以说啊,不能再给。好,这样去这样理解就可以了。好,运行一下。哎哟,我天。不行,这个又得把这些关闭,他他把这个当成什么呀,他把这个当成了病毒了。
18:04
呃,360就是这个毛衣,诶,刚才我记得退出去过一次,怎么又跑出来了。还是很很厉害的就退出了。过后。还能自动起来。不得不服。对,我是你没商量,Go wrong.go跑。看代码。大家看,果然是错了啊,果然是错了,是有是有问题的,家看这里面how you do error什么呀?他说get on closed closed。Get on,这个是报错了啊,报确实报错了,是哪个地方报错呢?应该是在这个位置,应该是在这个这个位置。啊,Do的do的时候,因为你在用的时候呢,他用的时候他发现诶取,其实你取的东西根本就没取到啊,其实你取的东西根本就没取到,它应该是在这个地方,它在这个地方connect.do的时候,他在正式去,真的真的是取东西了,可能这个地方它只是一个指向的一个引用而已,指向这个连接词的一个引用啊,它就相当于说这个连接先指到这个连接词去,然后它do的时候呢,它再正式去去啊,应该是这样一种操作啊,应该是这样操作,所以说他这方会肯定给你报错,就算错的啊,我可以把这个再打仔细一点,应该是这个地方do的时候肯定给你报错了,再看一下。
19:23
走,应该会有波浪号,果然是这啊,Ready go,他说get on closed啊,拿不出来了,已经因为你关闭了,但是你把这个打开,你如果把这个打开,它肯定怎么样,又可以跑了,跑一下。大家看这个代码没问题啊,所以说所以说在这在证明呢,就说我们这个连接词一定不要关闭啊,你关闭肯定就没法玩了,好同学们,我把这个代码呢,给大家整理到我们的笔记里边去啊,各位同学,那刚才呢,我们讲了ready的一个案例。对,讲了一个案例。的一个具体的案例,我们把它先拿过来。
20:01
好,刚才讲了示意图,那么现在我们看一下它的一个具体案例。对,连接使使用的案例,案例OK,我把代码呢给大家板书到我们的笔记里边去。非常简单啊,好,我把它整理一下。我把它整理一下,各位。放到我们的表格里边去。好的。好就这样子啊,好,同学们这块呢,我们先给大家介绍到这里。
我来说两句