持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情
创建数据库连接
搭建一个服务时,在使用数据库时,我的设计一般都是这样:
- 定义一个全局数据库对象
- 服务启动时初始化数据库连接
整个过程就是先后去数据库的连接,然后根据连接在数据库中查询数据,最后关闭连接释放数据库资源。然而每次需要从数据库中查询数据的时候都需要建立连接,数据库操作,然后释放连接。这样很可能就会导致响应时间变慢。
连接池
现基本使用的解决方式就是使用连接池,在连接池中预先建立好几个连接,然后使用时直接拿到连接去用,这样就可以避免频繁创建的的问题。
在开发过程中,有很多场景都可以使用连接池的设计思路。比如 HTTP 连接池、Redis 连接池等等。
连接池工作原理
工作原理可分为三个部分:
-
连接池建立。初始化系统时,根据配置建立连接池,即在池中建立几个连接对象,以便后续使用。
-
连接池管理。对可使用连接的分配和释放的管理。其中有2个重要的配置:最小连接和最大连接数。
对于连接的控制需要考虑的规则:
- 当连接数小于最小连接数时,则创建新的连接处理数据库请求
- 有空闲的连接就可以复用空闲连接
- 没有空闲连接且连接数小于最大连接数时,创建新的连接进行处理
- 连接数大于最大连接数,则根据配置中设定的时间进行等待有连接释放课使用
- 等待时间超出设定时间时跑出异常
-
连接池关闭。只有程序退出时,才关闭连接池中所有的连接,释放相关的资源。
所以,连接池涉及的主要参数主要有
- 最大连接数和最小连接数
- 最大空闲时间
- 获取连接允许超时时间
- 超时重试的次数
总结
这是一种常见的软件设计思想,叫做池化技术。为了减少因频繁创建对象造成性能开销问题,使用提前创建好对象,然后统一进行管理分配。