池化组件之连接池

池化组件:不停的执行某类任务。采用可以有效的提升性能。主要是用来解决资源复用的问题。常见的池化组件(连接池,请求池,线程池,内存池),下面主要介绍连接池。
对于服务器而言,连接池主要用来连接第三方服务,自己用的比较多,比较常见的:mysql连接池和redis连接池

1 数据库连接池

程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
其实就是创建数据库连接是耗时,也容易对数据库造成安全隐患,所以集中创建连接,并把他们集中管理,供程序使用,可以保证安全可靠。常见的就是mysql连接池和redis连接池。

不适用连接池与使用连接池的流程图:
在这里插入图片描述
对于不适用:每次服务器要操作sql语句时候,就会tcp建立连接,mysql认证,mysql关闭,tcp关闭每次都需要全部流程走一遍,耗时,也存在安全问题,效率低下。而对于使用了连接池是程序在启动的时候会创建一定的连接,进行管理,当使用时就从池里拿一个连接,用完后就归还给池。
区别:
不采用:实现简单;网络io较多,带宽利用率低,QPS低,应用频繁创建连接和关闭连接,导致临时对消较多,带来更多的内存碎片。关闭连接后,会出现大量的TIME_WAIT的TCP状态(在2个MSL之后关闭)
font size=“3” color=“red”>采用:设计较为复杂;降低了网络开销,连接复用,有效减少连接数,提升性能,避免新建连接,没有time_wait状态的问题。

2 数据库连接池运行机制

从连接池获取或创建可用连接;
使用完毕之后,把连接返回给连接池;
在系统关闭前,断开所有连接并释放连接占用的系统资源。
在这里插入图片描述
连接池一般与线程池搭配使用。对于连接需要进行容器管理,一般采用list或者vector存储连接。

3 连接池设计注意点

单连接与多连接区别:对于单连接时,在对于服务器既要读又要写的时候就无法实现,只能io等待阻塞,耗时,性能低下。多连接就即可写有可读。
线程池不断执行任务,任务怎么和连接进行绑定??连接管理
连接池的使用流程:
请求连接----》从容器中获取
归还连接----》放回容器中
新建连接----》插入容器

4 连接池与不使用的性能区别

线程池数量一般情况下要与连接池数量保存一直,再性能差不多的情况下,但是当再性能差距较大的情况下就不一定了,性能差距较大则连接池与线程池的使用就会低下。一般线程执行完任务时归还连接对象

5 连接池如何设计

1 连接到数据库,涉及到数据库ip,端口,用户名,密码,数据库名字等;
a 连接操作,每个连接对象都是独立的连接通道,它们是独立的
b 配置最小连接数和最大连接数
2 需要一个队列管理它的连接,比如使用list
3 获取连接对象
4 归还连接对象

连接池连接设置的数量原则
连接数= ((核心数2)+有效磁盘数)
例如cpu的4核i7,那么连接池连接数的大小应该为42 +1 = 9
上面的公式只是一个经验,具体还是要和线程池数量和具体的业务结合再一起

6 简单连接池源码分析

在这里插入图片描述
设计数据库连接池:一般情况下,是设计一个CDBPool类专门用来管理连接的CDBConn,CDBConn才是真正跟数据库进行交互干活的。而杜宇CDBPool类:需要再构造函数的时候传入数据库相关的ip,端口,参数等,还有一个连接池名.
提供的接口:
init() 开始会创建固定数量较少的连接。把将连接放入free容器管理
GetDBConn(time) 获取一个空闲的连接。一般情况下设计师有free容器和used容器两者,先去空闲容器去如果没有就去检查已经分配的连接多久没有返回,如果超过一定时间就自动回收。
RelDBConn() 释放连接
GetPoolName()获取连接池的名字,可能一个程序中有多个连接池

注意:redis连接池类似就不介绍了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丰恒谷

你的鼓励是我最大创作动力!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值