1. 程式人生 > >golang go-sql-drive mysql連線池的實現

golang go-sql-drive mysql連線池的實現

golang內部自帶了連線池功能,剛開始接觸golang的時候不瞭解這個,還自己搞了一個 sql.Open的物件管理池,真的非常囧啊。

sql.Open函式實際上是返回一個連線池物件,不是單個連線。在open的時候並沒有去連線資料庫,只有在執行query、exce方法的時候才會去實際連線資料庫。在一個應用中同樣的庫連線只需要儲存一個sql.Open之後的db物件就可以了,不需要多次open。

因為普通程式執行完畢之後資源就會被釋放掉,所以這裡嘗試使用web服務進行演示。

開啟web服務

首頁先啟動一個web服務監聽9090埠,比較簡單不多做說明。

1 2 3 4 5 6 7 funcstartHttpServer() { http.HandleFunc("/pool", pool) err := http.ListenAndServe(":9090", nil) iferr != nil { log.Fatal("ListenAndServe: ", err) } }

db物件初始化

宣告一個全域性的db物件,並進行初始化。

1 2 3 4 5 6 7 8 var
db *sql.DB funcinit() { db, _ = sql.Open("mysql""root:@tcp(127.0.0.1:3306)/test?charset=utf8") db.SetMaxOpenConns(2000) db.SetMaxIdleConns(1000) db.Ping() }

連線池的實現關鍵在於SetMaxOpenConns和SetMaxIdleConns,其中:

SetMaxOpenConns用於設定最大開啟的連線數,預設值為0表示不限制。
SetMaxIdleConns用於設定閒置的連線數。

設定最大的連線數,可以避免併發太高導致連線mysql出現too many connections的錯誤。設定閒置的連線數則當開啟的一個連線使用完成後可以放在池裡等候下一次使用。

請求方法

上面開啟http請求設定了請求/pool地址的執行方法

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

相關推薦

golang go-sql-drive mysql連線實現 golang go-sql-drive mysql連線實現

golang go-sql-drive mysql連線池的實現 golang內部自帶了連線池功能,剛開始接觸golang的時候不瞭解這個,還自己搞了一個 sql.Open的物件管理池,真的非常囧啊。 sql.Open函式實際上是返回

golang go-sql-drive mysql連線實現

golang內部自帶了連線池功能,剛開始接觸golang的時候不瞭解這個,還自己搞了一個 sql.Open的物件管理池,真的非常囧啊。 sql.Open函式實際上是返回一個連線池物件,不是單個連線。在open的時候並沒有去連線資料庫,只有在執行query、e

Go中使用MySQL連線

使用MySQL的連結池可能存在如下問題:在客戶端連線池中的一條空閒連結,可能是一條已經被MySQL服務端關閉掉的連結。 下面是beego中的設定MySQL連線池的方法: err = orm.RegisterDataBase("default", "mys

servlet+jsp+mysql+資料庫連線實現註冊登陸驗證碼功能

首先專案的結構及所用到的jar包如圖: 主要用到jdbc和jstl的jar包,大家可自行去相應網站下載 一、資料庫和資料表的建立 1.建庫語句: create database test; 2.建表語句: CREATE TABLE `t_users` (  

自定義資料庫連線實現方式 MySQL

應用程式直接獲取資料庫連線缺點 使用者每次請求都會建立一次資料庫連線,並且資料庫建立連線會消耗相對大的資源和時間。 如果針對於個別的工具或者是大量的程式碼測試甚至系統執行,對資料庫操作次數頻繁,極大的佔用資料庫資源,有可能會發生宕機或者記憶體溢位的現象。 而在大多的專案中,常常用到阿里巴

Golang安裝mysql資料庫驅動報錯cannot find package "github.com/go-sql-driver/mysql" in any of 的解決辦法

在安裝mysql資料庫驅動時。經常發生這樣的錯誤首先確保不是自己匯入庫的拼寫錯誤。然後檢查自己的環境變數的配置。 變數名:GOROOT 環境變數值是C:\Go\  GOPATH環境環境變數值是 C:\Go\bin也許每個人go的安裝路徑不同,但是安裝路徑下的GO資料夾 和bi

[C++]MYSQL 資料庫操作封裝及連線實現

Database類為單例類、執行緒安全、實現了連線池,並且封裝所需要的操作。 本程式碼在Ubuntu下測試可用,使用Mysql connector c++連線資料庫,並啟用C++11特性。 基本操作如下: //資料庫配置 DbSetting set

自定義資料庫連線實現方式 MySQL

應用程式直接獲取資料庫連線缺點 使用者每次請求都會建立一次資料庫連線,並且資料庫建立連線會消耗相對大的資源和時間。 如果針對於個別的工具或者是大量的程式碼測試甚至系統執行,對資料庫操作次數頻繁,極大的佔用資料庫資源,有可能會發生宕機或者記憶體溢位的現象。 而在大多的專案中

連線實現連線Mysql資料庫

之前操作資料庫都是直接使用命令操作(因為做的都是小東西,併發量不會很大),但是如果做實際應用的東西就必須考慮使用連線池實現對資料庫的操作,因為資料庫的連線和釋放都會耗費很大的資源,連線池的原理就是連線

C 語言實現MySQL連線

原始碼:連結:https://pan.baidu.com/s/1y0F3YrFfsZgDRe6g6r4RMg 密碼:vg2m 引言:資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個; 連線池技術大多運

golang開發的一個mysql連線代理,支援多種語言客戶端(PHP範例)

golang mysql pool proxy(MPP) golang開發的一個mysql連線代理池, HTTP返回查詢結果。 特性(迭代更新支援) golang查詢mysql, 支援連線池, HTTP返回資料,通過POST傳遞sql語句 (已實現) 增加了pos

Swoole MySQL 連線實現

目錄 概述 程式碼 擴充套件 小結 概述 這是關於 Swoole 入門學習的第八篇文章:Swoole MySQL 連線池的實現。 第七篇:Swoole RPC 的實現 第六篇:

Mysql-連線

#pragma once #include <deque> #include <mutex> #include <boost/thread/thread.hpp> #include <boost/thread/tss.hpp> #include &l

【Java】Spring和Tomcat自帶的連線實現資料庫操作

@[toc] 前言 前面我們已經用Spring和傳統的Jdbc實現資料庫操作、Spring和JdbcTemplate實現資料庫操作。但是這些都是基於直連的資料來源進行的,現在我們將介紹基於連線池的資料來源進行資料庫操作。前面幾個步驟都相同。 建立資料庫 首先建立我們的資料庫(這裡我使用的是Mysql)

jdbc連線實現

2、連線池實現   下面給出連線池類和連線池管理類的主要屬性及所要實現的基本介面: public class DBConnectionPool implements TimerListener{ private int checkedOut;//已被分配出去的連線數 private ArrayLis

基於SWOOLE的MYSQL資料庫連線,php mysql 連線

swoole_mysqlpool 使用Swoole的\Swoole\Coroutine\MySQL建立連線,通過靜態類和靜態成員屬性維護連線池,不同協程可以共享該連線池。 排隊機制(先進先出)使用協程的特殊功能實現: \Swoole\Coroutine::resume(

swoole4-swoole建立Mysql連線

一 .什麼是mysql連線池 場景:每秒同時有1000個併發,但是這個mysql同時只能處理400個連線,mysql會宕機。 解決方案:連線池,這個連線池建立了200個和mysql的連線,這1000個併發就有順序的共享這連線池中的200個連線。 這個連線池能夠帶來額外的效能提升,因為這

深入解析Node.js使用MySQL連線

這篇文章主要介紹了Node.js使用MySQL連線池的方法,結合具體例項形式分析了nodejs操作mysql連線池的相關模組安裝、連線、查詢等使用技巧,寫的十分的全面細緻,具有一定的參考價值,對此有需要的朋友可以參考學習下。如有不足之處,歡迎批評指正。 Nodej

Hibernate使用Tomcat配置的Mysql連線

一個tomcat下的Hibernate程式`總是用不了幾天就掛`` 就試著做個連線池用``` 下面是我的步驟`: 1: 為Tomcat裝administration tools`` 第一步,確認你的Tomcat 中是否已安裝了Administration We

c3p0+mysql連線超時問題

java.sql.SQLException: Communications link failure 今天發現一個非常有趣的問題,當應用啟動之後,如果在一段時間內沒有任何操作,當再次操作的時候就會報一個Communications link failure異常,這個問題是什