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

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

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

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

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

原理及優(yōu)點

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

用服裝店招聘導購來說明數(shù)據(jù)庫連接池。當只有顧客A時,服裝店招聘一個導購A,如果之后顧客B、C、D、E、F…也來了,那么就需要不斷招聘導購B、C、D、E、F…,這樣會帶來大量的人力成本。

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

等A、B、C、D、E導購其中任何一個服務完成后(比如說導購D),他又重新回到了導購組中,這時主管會將他分配給顧客F。

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

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

連接池的作用

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

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

實現(xiàn)連接池

1.導入mysql模塊

首先安裝mysql模塊:

npm install mysql

導入mysql模塊:

const mysql = require("mysql");

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

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

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

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

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

3.從連接池中獲取一個連接

語法:

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

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

connection.release();

5.從連接池中移除連接對象

connection.destory();

6.關閉該連接池

pool.end();

案例

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

stu表具體如下:

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

const mysql = require("mysql");

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

// 將數(shù)據(jù)庫連接池對象導出
module.exports = pool;

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

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

啟動服務器,在瀏覽器中打開http://localhost:3000/test,會看到成功查詢到了表stu中的數(shù)據(jù)。

總結

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

相關文章

  • nodejs前端自動化構建環(huán)境的搭建

    nodejs前端自動化構建環(huán)境的搭建

    本文這里給大家介紹的是nodejs中前端自動化構建環(huán)境的搭建方法,非常的細致全面,有需要的小伙伴可以參考下
    2017-07-07
  • Node.js調用fs.renameSync報錯(Error: EXDEV, cross-device link not permitted)

    Node.js調用fs.renameSync報錯(Error: EXDEV, cross-device link not

    這篇文章主要介紹了Node.js調用fs.renameSync報錯(Error: EXDEV, cross-device link not permitted),非常具有實用價值,需要的朋友可以參考下
    2017-12-12
  • 用Electron寫個帶界面的nodejs爬蟲的實現(xiàn)方法

    用Electron寫個帶界面的nodejs爬蟲的實現(xiàn)方法

    這篇文章主要介紹了用Electron寫個帶界面的nodejs爬蟲的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • express結合nodejs開啟服務示例模版

    express結合nodejs開啟服務示例模版

    這篇文章主要為大家展現(xiàn)了express結合nodejs開啟服務的代碼示例模版,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • 從零學習node.js之文件操作(三)

    從零學習node.js之文件操作(三)

    這篇文章主要給大家介紹了關于node.js中對文件和目錄的操作,我們不一個個講每個api的使用,只是從幾個例子來了解下下文件系統(tǒng)。需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • 利用node 判斷打開的是文件 還是 文件夾的實例

    利用node 判斷打開的是文件 還是 文件夾的實例

    今天小編就為大家分享一篇利用node 判斷打開的是文件 還是 文件夾的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 深入理解Node.js中通用基礎設計模式

    深入理解Node.js中通用基礎設計模式

    大家在談到設計模式時最先想到的就是 singletons, observers(觀察者) 或 factories(工廠方法)。本文重點給大家介紹Node.JS一些基礎模式的實現(xiàn)方法,感興趣的朋友跟隨腳本之家小編一起學習吧
    2017-09-09
  • Vue+Node實現(xiàn)的商城用戶管理功能示例

    Vue+Node實現(xiàn)的商城用戶管理功能示例

    這篇文章主要介紹了Vue+Node實現(xiàn)的商城用戶管理功能,結合實例形式詳細分析了商城用戶管理的前臺登錄、校驗、跳轉、退出等相關操作技巧,需要的朋友可以參考下
    2019-12-12
  • 開發(fā)Node CLI構建微信小程序腳手架的示例

    開發(fā)Node CLI構建微信小程序腳手架的示例

    這篇文章主要介紹了開發(fā)Node CLI構建微信小程序腳手架,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • node中間層實現(xiàn)文件上傳功能

    node中間層實現(xiàn)文件上傳功能

    這篇文章主要介紹了node中間層實現(xiàn)文件上傳功能,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2018-06-06

最新評論

宝山区| 河津市| 昆山市| 西昌市| 阿克陶县| 瑞金市| 缙云县| 福清市| 南靖县| 太康县| 建平县| 邮箱| 宽城| 新源县| 湘乡市| 龙井市| 广丰县| 喀喇沁旗| 格尔木市| 阳西县| 汾阳市| 东莞市| 桃园市| 泰宁县| 洛浦县| 项城市| 玉门市| 赣州市| 永仁县| 常山县| 资源县| 清河县| 固镇县| 留坝县| 宁武县| 横峰县| 临武县| 特克斯县| 鄂托克前旗| 利辛县| 襄城县|