跳到主要内容

db_pool

简介

数据库连接池,依赖pkg.dbi/pkg.gsmysql/pkg.gsqlite。 使用步骤:

  1. 设置数据库连接参数

mysql:

db_pool.set_db_config("record", {
"driver" : "mysql",
"address" : "localhost",
"db": "records",
"user": "root",
"passwd": "123",
"max_conn_count": 20
});

sqlite:

db_pool.set_db_config("abc", {
"driver" : "sqlite",
"db" : "abc",
"max_conn_count": 20
});

PS: max_conn_count: 必须设置, 否则会陷入死循环

  1. 获取连接

object o = db_pool.take_connection("record");

PS: 使用完后必须记得将连接放回连接池

  1. 关闭连接/放回连接

defer db_pool.give_connection(o);

  1. 使用连接, 参考dbi

write(o.select("select * from err_fp2id"));

组件接口

db_pool.gs

函数原型函数作用
void set_db_config(string db, map db_config)设置数据库的连接配置
map get_db_config(string db)获取某个数据库的配置信息
object take_connection(string db)从连接池获取前往数据库的连接对象
void give_connection(object conn)释放连接池对象
object assure_connection(string db)获取当前协程对应的数据库连接对象
void close_connection(string db)关闭当前协程对应的数据库连接对象
object new_connection(string db)新建一个到指定数据库的连接

DbConnection

数据库连接

成员变量

变量名类型初始值须初始化描述
dbstringnil可选数据库名称
dbcobjectnil可选数据库连接对象
pingint0可选最近一次ping时间
activeint0可选最近一次活跃时间
似乎没用,有ping时间差不多了
原策略可能是连接被取走时更新活跃时间?
created_by_poolboolfalse可选是不是连接池创建(仅调试)

成员方法

函数原型函数作用
bool connect()连接数据库
bool keep_alive()保持连接

DbConnectionPool

数据库连接池

看起来原来主要是限制连接数量?

成员变量

变量名类型初始值须初始化描述
dbstringnil可选数据库名称
free_listarraynil可选空闲连接列表
listarraynil可选使用中的连接列表

成员方法

函数原型函数作用
int get_capacity()获取数据库连接池的容量
bool is_out_of_capacity()判断是否超出容量
DbConnection create_connection()新建一个连接实例
void destroy_connection(DbConnection connection)销毁一个连接实例
DbConnection pop_front()从头部取出一个连接实例
void push_back(DbConnection connection)将连接实例放入空闲列表