池化有什么好处?
数据库连接池的基本实现思路如上图所示,
1. 当存在空闲链接的时候,直接使用空闲连接。
2. 当没有空闲连接,并没有达到最大值时,创建新的连接。
3. 当没有空闲连接,连接数也达到最大值,实行等待超时策略和重试策略。
池化时,数据库连接的生成和释放是这样的:
通过DataSource获取逻辑连接,当连接关闭的时候,并不是真正释放实际的数据库连接,而是重新放回池子。这样实现了物理数据库连接的复用,避免了来回的创建和释放带来的开销,减少了内存垃圾的生成。
此外,DataSource可以对最大连接数进行限制,并非无限制地无限递增,导致数据库连接数过大。
当并发请求数超过数据库最大连接数的时候,有如下处理策略:
1. 丢弃后续的请求(可用性降低,用户体验差)
2. 队列处理,并调大超时时间
使用队列时,需要为请求设置一个超时时间,否则会导致请求无限增长,导致系统资源枯竭。