最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js如何實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接池

 更新時(shí)間:2024年11月25日 14:34:44   作者:橘貓吃不胖~  
文章介紹了Node.js中實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)連接池的方法,通過(guò)預(yù)先建立和管理數(shù)據(jù)庫(kù)連接對(duì)象,優(yōu)化數(shù)據(jù)庫(kù)連接的使用效率

什么是數(shù)據(jù)庫(kù)連接池

數(shù)據(jù)庫(kù)連接池是程序啟動(dòng)時(shí)建立足夠數(shù)量的數(shù)據(jù)庫(kù)連接對(duì)象,并將這些連接對(duì)象組成一個(gè)池,由程序動(dòng)態(tài)地對(duì)池中的連接對(duì)象進(jìn)行申請(qǐng)、使用和釋放。

原理及優(yōu)點(diǎn)

數(shù)據(jù)庫(kù)連接池在初始化時(shí)將會(huì)創(chuàng)建一定數(shù)量的數(shù)據(jù)庫(kù)連接對(duì)象放到連接池中,連接池都將一直保證至少擁有這么多的連接數(shù)量,當(dāng)有數(shù)據(jù)庫(kù)需要被連接的時(shí)候,它會(huì)向數(shù)據(jù)庫(kù)連接池申請(qǐng)資源和使用,使用完成后會(huì)釋放到數(shù)據(jù)庫(kù)連接池中。當(dāng)然數(shù)據(jù)庫(kù)連接池中擁有最小連接數(shù)量和最大連接數(shù)量,當(dāng)數(shù)據(jù)庫(kù)的連接超過(guò)連接池中最大的數(shù)量的時(shí)候,這些請(qǐng)求將被加入到等待隊(duì)列中。

用服裝店招聘導(dǎo)購(gòu)來(lái)說(shuō)明數(shù)據(jù)庫(kù)連接池。當(dāng)只有顧客A時(shí),服裝店招聘一個(gè)導(dǎo)購(gòu)A,如果之后顧客B、C、D、E、F…也來(lái)了,那么就需要不斷招聘導(dǎo)購(gòu)B、C、D、E、F…,這樣會(huì)帶來(lái)大量的人力成本。

如果讓一個(gè)主管去管理一定數(shù)量(以5為例)的導(dǎo)購(gòu),當(dāng)顧客A、B、C、D、E來(lái)了,主管依次分配了導(dǎo)購(gòu)A、B、C、D、E,但如果顧客F來(lái)了,由于已經(jīng)沒(méi)有空閑的導(dǎo)購(gòu)了,因此顧客F需要排隊(duì)等待。

等A、B、C、D、E導(dǎo)購(gòu)其中任何一個(gè)服務(wù)完成后(比如說(shuō)導(dǎo)購(gòu)D),他又重新回到了導(dǎo)購(gòu)組中,這時(shí)主管會(huì)將他分配給顧客F。

數(shù)據(jù)庫(kù)的鏈接池也是這個(gè)意思,當(dāng)網(wǎng)站某一天有很大的流量的時(shí)候,數(shù)據(jù)庫(kù)服務(wù)器需要為每次鏈接創(chuàng)建一次數(shù)據(jù)庫(kù)鏈接。

這樣就很浪費(fèi)數(shù)據(jù)庫(kù)的資源,并且頻繁的創(chuàng)建和關(guān)閉數(shù)據(jù)庫(kù)的鏈接,很容易導(dǎo)致服務(wù)器內(nèi)存溢出等情況發(fā)生。

連接池的作用

數(shù)據(jù)庫(kù)的連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接對(duì)象的。

它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)的連接對(duì)象。而不是重新創(chuàng)建一個(gè)。

實(shí)現(xiàn)連接池

1.導(dǎo)入mysql模塊

首先安裝mysql模塊:

npm install mysql

導(dǎo)入mysql模塊:

const mysql = require("mysql");

2.創(chuàng)建數(shù)據(jù)庫(kù)連接池

創(chuàng)建數(shù)據(jù)庫(kù)連接池語(yǔ)法如下:

const pool = mysql.createPool({
    host: "數(shù)據(jù)庫(kù)服務(wù)器地址",
    port: 3306, // MySQL數(shù)據(jù)庫(kù)端口號(hào)
    database: "數(shù)據(jù)庫(kù)名",
    user: "連接數(shù)據(jù)庫(kù)的用戶(hù)名",
    password: "連接數(shù)據(jù)庫(kù)的密碼",
    connectionLimit: "指定連接池中最大的鏈接數(shù),默認(rèn)是10",
    queueLimit: "指定允許掛起的最大連接數(shù),如果掛起的連接數(shù)超過(guò)該數(shù)值,就會(huì)立刻拋出錯(cuò)誤,默認(rèn)屬性值為0,代表不允許被掛起的最大連接數(shù)",
    multipleStatements: "是否運(yùn)行執(zhí)行多條sql語(yǔ)句,默認(rèn)值為false"
})

示例:創(chuàng)建數(shù)據(jù)庫(kù)連接池

const mysql = require("mysql");
const pool = mysql.createPool({
    host: "127.0.0.1", // 主機(jī)地址
    port: 3306,
    database: "info", // 數(shù)據(jù)庫(kù)名字
    user: "root", // 連接數(shù)據(jù)庫(kù)的用戶(hù)名
    password: "123456", // 連接數(shù)據(jù)庫(kù)密碼
    connectionLimit: 20, // 連接池最大連接數(shù)
    multipleStatements: true // 允許執(zhí)行多條sql語(yǔ)句
})
module.exports = pool;

3.從連接池中獲取一個(gè)連接

語(yǔ)法:

pool.getConnection(function (err, connection) {
    // 代碼
});
  • err:該參數(shù)是指操作失敗時(shí)的錯(cuò)誤對(duì)象。
  • connection:該值為一個(gè)對(duì)象,代表獲取到的連接對(duì)象。當(dāng)連接失敗時(shí),該值為undefined。

4.釋放連接對(duì)象(放回連接池)

connection.release();

5.從連接池中移除連接對(duì)象

connection.destory();

6.關(guān)閉該連接池

pool.end();

案例

使用連接池連接MySQL數(shù)據(jù)庫(kù),查詢(xún)info數(shù)據(jù)庫(kù)中stu表中的所有信息,

stu表具體如下:

創(chuàng)建mydb.js,創(chuàng)建數(shù)據(jù)庫(kù)連接池,代碼如下:

const mysql = require("mysql");

// 創(chuàng)建數(shù)據(jù)庫(kù)連接池
const pool = mysql.createPool({
    host: "localhost",
    port: 3306,
    user: "root",
    password: "123456",
    database: "info",
    connectionLimit: 20,
});

// 將數(shù)據(jù)庫(kù)連接池對(duì)象導(dǎo)出
module.exports = pool;

創(chuàng)建test.js文件,使用連接池查詢(xún)數(shù)據(jù)庫(kù),代碼如下:

const express = require("express"); // 導(dǎo)入express
const app = express(); // 創(chuàng)建實(shí)例
const pool = require("./mydb"); // 導(dǎo)入連接池
// http://localhost:3000/test
app.get("/test", ((req, res) => {
    // 從連接池中獲取數(shù)據(jù)庫(kù)的連接對(duì)象
    pool.getConnection(function (err, conn) {
        if (err) {
            console.log("數(shù)據(jù)庫(kù)連接失敗");
        } else {
            console.log("數(shù)據(jù)庫(kù)連接成功");
            // 定義sql查詢(xún)語(yǔ)句
            let sql = "select * from stu";
            // 查詢(xún)操作
            conn.query(sql, function (err, result) {
                if (err) {
                    console.log("數(shù)據(jù)庫(kù)查詢(xún)失敗");
                } else {
                    res.send(result);
                    conn.release();
                }
            })
        }
    })
}))
// 監(jiān)聽(tīng)3000端口
app.listen(3000);

啟動(dòng)服務(wù)器,在瀏覽器中打開(kāi)http://localhost:3000/test,會(huì)看到成功查詢(xún)到了表stu中的數(shù)據(jù)。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

同仁县| 应用必备| 林周县| 连云港市| 宽城| 新巴尔虎左旗| 台中市| 如东县| 临朐县| 盘山县| 文水县| 康定县| 明水县| 沅江市| 乳源| 乌兰察布市| 栾川县| 阿坝县| 隆化县| 方山县| 肇州县| 漾濞| 普陀区| 印江| 吉木萨尔县| 沁水县| 灵山县| 方正县| 陇南市| 高雄县| 登封市| 武城县| 昂仁县| 德兴市| 资阳市| 宣化县| 大关县| 曲阳县| 莒南县| 东平县| 莱西市|