自己嘗試用c++ 新標準實現了資料庫連線池,**簡化了很多。
思路:關於資料庫連線池介紹可以看下面兩篇文章:將資料庫的連線當作乙個物件新增進list佇列中,在連線池建立的時候就建立好佇列,並新增自定義大小的連線物件,連線物件用智慧型指標來管理(現代c++中不應該出現delete語句),避免類似記憶體洩漏等記憶體問題,智慧型指標上用lambda表示式註冊了delete刪除函式來釋放連線資源,及時歸還,(其中用了std::move來轉移list中的物件所有權到函式裡的臨時智慧型指標物件,當離開作用域時,自動釋放。)
**資料庫連線池(一)
**資料庫連線池(二)
mysql_connect.h
#ifndef _mysql_connection_
#define _mysql_connection_
//c++
#include
#include
#include
#include
#include
//mysql driver
#include
#include
//mysql execute
#include
#include
#include
#include
#include
//thread mutex
#include
using
namespace sql;
using delfunc = std::function;
class connectionpool
;#endif
mysql_connect.cpp
#include
#include
#include
#include "mysql_connect.h"
connectionpool*
connectionpool::pool = nullptr;
//private
//建構函式
connectionpool::connectionpool(std::string name, std::string pwd, std::string nurl, int maxsize):
username(name), password(pwd), url(nurl), poolsize(maxsize)
//析構函式
connectionpool::~connectionpool()
//得到連線池大小
intconnectionpool::getpoolsize()
//增加連線
void
connectionpool::addconn(int size)
); conlist.push_back(std::move(sp));
}}//初始化連線池
void
connectionpool::initconnectpool(int initialsize)
//銷毀乙個連線
void
connectionpool::destoryoneconn()
//銷毀整個連線池
void
connectionpool::destorypool()
}//擴大連線池
void
connectionpool::expandpool(int size)
//縮小連線池
void
connectionpool::reducepool(int size)
for(int i = 0; i < size; i++)
poolsize -= size;
}//public
//得到連線池例項
connectionpool*
connectionpool::getinstance()
return pool;
}//得到乙個連線
std::shared_ptr
connectionpool::getconnect()
//歸還乙個連線
void
connectionpool::retconnect(std::shared_ptr
&ret)
try.cpp
#include
#include
#include
#include
#include
connectionpool *pool = connectionpool::getinstance();
int main(int argc, char *argv)
sleep(10);
pool->retconnect(con);
std::cout
<< pool->getpoolsize() << std::endl;
sleep(10);
return exit_success;
}
我自己進行了測試,建立資料庫連線池,呼叫乙個物件,然後執行資料庫連線,查詢出了結果,然後歸還乙個連線。
建立連線池前
建立連線池後
id 792是我呼叫的那個連線,然後執行查詢操作,所以db顯示的是連線上xl_db。這個是自己寫的乙個簡單的資料庫連線池,可以參考下,如果要使用的話還需要自己改改。
這些××池之類,比如執行緒池,程序池,連線池等原理都差不多,就是先建立一批物件,然後乙個佇列裡儲存,需要的時候來取,用完歸還就行,然後通過c++11新特性等我們能提公升效能和安全性以及程式的簡介性,比如剛才說的std::move和智慧型指標,lambda等。
c 實現資料庫連線池
自己嘗試用c 新標準實現了資料庫連線池,簡化了很多。思路 將資料庫的連線當作乙個物件新增進list佇列中,在連線池建立的時候就建立好佇列,並新增自定義大小的連線物件,連線物件用智慧型指標來管理 現代c 中不應該出現delete語句 避免類似記憶體洩漏等記憶體問題,智慧型指標上用lambda表示式註冊...
資料庫連線池 Redis連線池
基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...
資料庫連線池
實現資料連線池,讓系統有更高有執行效率 using system using system.data using system.data.sqlclient using system.collections using system.threading public class dataaccess...