hello world

连接池

连接池的定义与主要功能 在软件工程中,连接池(英语:connection pool)是维护的数据库连接的缓存,以便在将来需要对数据库发出请求时可以重用连接。连接池用于提高在数据库上执行命令的性能。为每个用户打开和维护数据库连接,尤其是对动态数据库驱动的网站应用程序发出的请求,既昂贵又浪费资源。在连接池中,创建连接之后,将连接放在池中并再次使用,这样就不必建立新的连接。如果所有连接都正在使用,则创建一个新连接并将其添加到池中。连接池还减少了用户必须等待建立与数据库的连接的时间。1 连接池的数据结构 一般来说连接池的大小是一个动态的范围,连接池内部的连接实例2数量会随着应用程序的峰值而变化; 高峰时期连接池内连接实例2数量高,低峰时期连接池内连接实例2数量低;在应用程序的高低峰 转变过程中,利用堆栈3的数据结构(先入后出)快速标记出闲置实例,方便定期清理; 结构示意图 连接池的使用 连接池的使用我个人认为有两种方法:第一种是块使用法,第二种是行使用法;其中的块与行的定义标准是以代码作用域为参考标准; 块使用法 块使用法就是我们在使用连接池时候将连接实例取出后自行放回; 该种使用方法一般在代码中代码作用域比较大块; 伪代码如下类似: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package main import "time" func main() { // 从连接池中取出实例 instance := pool.pop() defer pool.push(instance) instance.do("hello world 1") time.Sleep(time.Millisecond * 10) instance.do("hello world 2") time.Sleep(time.Millisecond * 10) instance.do("hello world 3") time.Sleep(time.Millisecond * 10) } 行使用法 行使用法是我们利用代理类或代理方法接管对连接实例的操作; 在业务代码上是无需从连接池中取出实例再操作; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package main func proxy(command string) { instance := pool....

2022-08-31 16:23:32+08:00 · 3 分钟 · 605 字 · lazychanger