回答完数据库连接池原理,面试官跪着求我入职他们公司

被面试官虐待的经历

来自面试官发自灵魂深处的拷问:说说你对连接池的理解;
一脸懵逼的我:“额~ ~ ~,连接池是把数据库的连接统一进行管理,做到连接复用的目的”;
咄咄逼人的面试官:“嗯,没错,还有呢?说说连接池的原理”;
一脸懵逼的我:“还有吗?额~~,不清楚耶”;
咄咄逼人的面试官:“你简历上写着精通这,精通那,但我感觉你只是会用,连熟悉都说不上,是谁给你的自信来面试高级架构师职位的?下次面试把简历写真实一点,回去吧!一会赶不上二路汽车了!”;

以上是博主之前真实的面试经历,一点都不夸张,每当面试官问了好几个问题都回答不上来的时候,你就能感受到面试官充满嫌弃的表情,而你又是一副走也不是,留也不是的尴尬局面,只能安静地坐在面试间被尽情的蹂躏;从这以后,我就发奋图强,势必要日后令人刮目相看,于是乎,在家日以夜继地学习,中国经过简单的半小时研究,终于让我掌握了数据库连接池的原理;

为什么要用连接池

要回答这个问题,我们先来了解一下以前的项目是怎样连接数据库的,在以前的项目,因为并发量较小, 所以每次请求都会创建一个连接,使用完之后在销毁连接,这样的小项目用起来似乎没什么太大影响;

但现在是什么时候啊?都21世纪了,人家并发量都是过亿级了,这样频繁地开启关闭连接,对数据库来说,都是极大的消耗,并且每次连接数据库是需要时间的,因为数据库需要验证你的登录账号和密码,最终的影响就是会造成系统效率低下,响应速度慢。

为了解决这一难题,数据库连接池就发明出来了,连接池的解决方案就是在系统启动时先创建好一定数据的连接,放在空闲线程池中,需要用到的时候从池中取出使用,用完之后在放回空闲线程池,空闲的连接就静静地躺在队列里面;

这项技术极大地减少了连接数据库时的消耗,大大地减少了内存的使用;最重要的是做到连接复用机制;池中的连接都由应用程序来管理,决定什么时候创建连接和释放连接;先看看一个大概的流程图,然后我们仔细讲。

线程池概念

  • 空闲连接池 :已创建的连接池,当后端需要访问数据库时,先判断空闲连接池有无可用的连接,如果有,会从空闲连接池中取出一个连接,变为活动连接,用完后会放回空闲连接池

  • 活动连接池:正在使用的连接

  • 最大连接数:最多能创建几个连接

详细流程

当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,则将连接分配给客户使用;如果没有空闲连接,则查看当前所开的连接数是否已经达到最大连接数,如果没达到就重新创建一个连接给请求的客户;如果达到就按设定的最大等待时间进行等待,如果超出最大等待时间,则抛出异常给客户。具体流程走向如下图

传统连接和连接池区别

1、传统连接方式

传统连接方式是每一个请求就使用去连接一次数据库,以mysql为例,当服务器收到请求时,服务器就会开启一个连接,连到数据库。

我们知道java代码连接数据库的时候使用的是http协议,首先需要建立tcp连接,然后再经过数据库的连接;最后才是执行sql语句,执行完后还得关闭数据库和http的连接;光连接的开销就不得了;下图是不使用连接池的流程图

2、连接池方式

当我们使用了连接池后,就可以省去又长又臭又重的http连接,因为连接已经启动好并且放在空闲线程里面了,所以我么们需要用的时候直接去队列里面取就好了,省去了大量连接的资源消耗;既节省了网络开销,又提升了响应速度,系统的性能成倍数提升;

连接池常用参数详解

  • initialSize:初始化连接数,也就是系统一开始启动时将会创建的连接数量;

  • MinIdle:最小连接数,也就是空闲连接池,当系统启用后,连接池中的数量将不少于 MinIdle 的数量;如果发现空闲线程池中的数量不足,那么会启用新的连接器放入池中;

  • MaxActive :连接池最大连接数量,每次使用完连接都会判断池中的连接数是否超过最大连接数, 如果创建的连接数量达到最大连接数,将会回收剩余空闲的连接,确保不会超过最大连接数;

  • maxWait:获取连接时最大等待时间,单位毫秒。超时将抛出异常;

最后

其实连接池还是比较简单的,如果你学过java的线程池,那么你会更容易理解连接池的原理,知道思路之后,相信大家肯定也可以自己手写一个连接池出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值