1、为什么要使用连接池
池化技术可以减少资源的创建次数,提高程序的响应性能,特别是在高并发下特别明显,常见的有线程池、内存池、连接池、对象池;使用池式缓存的资源对象有如下特点:
1)对象创建时间长;
2)对象创建需要大量资源;
3)对象创建后可被重复使用;
2、连接池的设计原理
比如登陆,发消息等被封装成任务,每个任务放到线程池的队列中,比如每个发消息任务都要和数据库创建创建连接是没有必要的;没创建一个连接都要进行三次握手,验证,用户退出,四次挥手是无效的措施; 只有执行sql是有效的;
比如,连接池创建了4个连接,保持线程池模块连接到数据库中,如果线程池需要操作数据库做任务,那么只需要从连接池获取连接,每个连接只能同时给一个任务用。比如线程1从连接池获取一个连接操作数据库,用完以后归还连接到线程池;
线程池:主动操作,获取并执行任务;
连接池:被动操作,类似线程池,池对象被任务获取,执行完任务后归还;
3、mysql不使用连接池的情况下,实现简单,但是每次发起sql操作都要经历tcp建立连接,数据库验证,数据库用户退出,tcp断开连接;网络io较多,带宽利用率低,qps较低;频繁创建连接和关闭连接,导致临时对象较多·,带来更多的内存碎片,在关闭连接后会出现大量TIME_WAIT的TCP状态;
4、使用连接池时,第一次访问需要建立连接,但之后的访问,均会复用之前创建的连接,直接执行sql语句;缺点是设计复杂,优点是降低了网络开销,连接复用有限的减少了连接数,提高性能避免频繁创建连接,没有TIME_WAIT状态问题;
5、长连接和连接池
长连接是一些驱动,驱动框架、ORM工具的特性,由驱动来保持连接句柄的打开,以便后续数据库操作可以重用连接,从而减少数据库连接的开销;
连接池,是应用服务器的组件,它可以通过参数配置连接数,连接检测,连接的生命周期等;连接池内的连接就是长连接;
6、数据库连接池运行机制
1)连接池获取或创建可用连接;
2)使用完毕后,把连接返回给连接池;
3)系统关闭前,断开所有连接并释放连接占用的系统资源;
7、线程池设计
使用连接池需要预先建立数据库连接;设计思路:
1)长连接数据库,涉及数据库ip,端口,用户名,密码,数据库名字等;
2)每个连接对象都是独立的连接通道,它们都是独立的;
3)配置最小连接数和最大连接数;比如cpu可以同时并发128个线程,任务是部分需要操作数据库,部分不需要操作数据库的,通常同时操作数据库有64个线程,那么我们就把最小连接数设置为64,最多同时操作数据库为128个线程,那么我们就把最大连接数设置为128;
4)需要一个队列管理连接;
5)获取连接对象、归还连接对象
6)连接池名字