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) | 将连接实例放入空闲列表 |