mysql连接池简单原理介绍+高并发场景下的设计
目录
mysql连接池
引入
介绍
池化技术
基本概念
高并发场景下
执行sql失败
mysql连接池
引入
当我们在网站中使用数据库时,设计好表结构后,大部分都是在写上层代码
- mysql的主要工作就是在需要时连接数据库,连上之后做一些事务,就被释放掉了 -- 短连接
- 短连接是为了提高整体效率,不然有些线程一直不使用,却一直保持连接状态 ; 且避免了长期占用数据库连接的情况,这样可以让更多的线程或请求获取连接,提高资源利用率
- 但频繁的连接和断开会增加开销
通过引入池化技术可以减少连接建立和关闭的频率,并且提供了快速获取连接的能力
介绍
MySQL连接池是一个用于管理和复用数据库连接的机制,主要目的是提高应用程序的性能和资源利用率
- 是一种编码层面上的技术
池化技术
一种用于高效管理和复用资源的设计模式,广泛应用于数据库连接、线程、对象等领域
- 通过维护一组预先创建的资源(如数据库连接、线程或对象),在需要时从池中获取并使用,使用完后再归还
- 避免了频繁创建和销毁资源带来的性能开销
基本概念
连接池维护一组预先创建的数据库连接,应用程序在需要时可以从池中获取连接,使用完后再归还
- 也就是不再直接与mysql建立连接,而是去连接池里获取已有连接,来执行数据库操作
高并发场景下
也可以结合多线程,让请求可以被异步处理
- 创建多个线程与数据库保持连接状态
- 当有需要执行的sql语句到来时,push进任务队列中,然后分配线程去处理,每个线程内部都有一个对象,提供mysql连接/执行等方法
说具体一点就是:
- 作为请求方,可以定义一个task类,里面包含要执行的sql语句和回调方法
- 然后将类对象push进任务队列中,线程拿着里面的sql语句去执行
回调方法是干嘛的呢?
- 因为我们的查询操作是需要拿到结果的
- 所以只要这个回调方法被设置,线程就执行它,并将查询结果通过函数的参数/返回值返回给上层,这样请求方就可以拿到结果了
执行sql失败
如果sql失败,就reset连接
- 是为了确保后续操作的可靠性
原因:
- 在高并发环境下,数据库可能因为各种原因(如负载过重、网络问题等)导致连接出现问题 -- 重置连接可以重新初始化连接的状态,继续正常工作
- 也可能连接在执行过程中进入不一致或错误的状态 -- 重置连接可以清除这些状态,确保连接干净可用