db_pool
简介
数据库连接池,依赖pkg.dbi/pkg.gsmysql/pkg.gsqlite。 使用步骤:
- 设置数据库连接参数
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
: 必须设置, 否则会陷入死循环
- 获取连接
object o = db_pool.take_connection("record");
PS: 使用完后必须记得将连接放回连接池
- 关闭连接/放回连接
defer db_pool.give_connection(o);
- 使用连接, 参考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
数据库连接
成员变量
变量名 | 类型 | 初始值 | 须初始化 | 描述 |
---|---|---|---|---|
db | string | nil | 可选 | 数据库名称 |
dbc | object | nil | 可选 | 数据库连接对象 |
ping | int | 0 | 可选 | 最近一次ping时间 |
active | int | 0 | 可选 | 最近一次活跃时间 似乎没用,有ping时间差不多了 原策略可能是连接被取走时更新活跃时间? |
created_by_pool | bool | false | 可选 | 是不是连接池创建(仅调试) |
成员方法
函数原型 | 函数作用 |
---|---|
bool connect() | 连接数据库 |
bool keep_alive() | 保持连接 |
DbConnectionPool
数据库连接池
看起来原来主要是限制连接数量?
成员变量
变量名 | 类型 | 初始值 | 须初始化 | 描述 |
---|---|---|---|---|
db | string | nil | 可选 | 数据库名称 |
free_list | array | nil | 可选 | 空闲连接列表 |
list | array | nil | 可选 | 使用中的连接列表 |
成员方法
函数原型 | 函数作用 |
---|---|
int get_capacity() | 获取数据库连接池的容量 |
bool is_out_of_capacity() | 判断是否超出容量 |
DbConnection create_connection() | 新建一个连接实例 |
void destroy_connection(DbConnection connection) | 销毁一个连接实例 |
DbConnection pop_front() | 从头部取出一个连接实例 |
void push_back(DbConnection connection) | 将连接实例放入空闲列表 |