mysql和redis连接池

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)连接池名字

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值