Node.js如何实现MySQL数据库连接池

 更新时间:2024年11月25日 14:34:44   作者:橘猫吃不胖~  
文章介绍了Node.js中实现MySQL数据库连接池的方法,通过预先建立和管理数据库连接对象,优化数据库连接的使用效率

什么是数据库连接池

数据库连接池是程序启动时建立足够数量的数据库连接对象,并将这些连接对象组成一个池,由程序动态地对池中的连接对象进行申请、使用和释放。

原理及优点

数据库连接池在初始化时将会创建一定数量的数据库连接对象放到连接池中,连接池都将一直保证至少拥有这么多的连接数量,当有数据库需要被连接的时候,它会向数据库连接池申请资源和使用,使用完成后会释放到数据库连接池中。当然数据库连接池中拥有最小连接数量和最大连接数量,当数据库的连接超过连接池中最大的数量的时候,这些请求将被加入到等待队列中。

用服装店招聘导购来说明数据库连接池。当只有顾客A时,服装店招聘一个导购A,如果之后顾客B、C、D、E、F…也来了,那么就需要不断招聘导购B、C、D、E、F…,这样会带来大量的人力成本。

如果让一个主管去管理一定数量(以5为例)的导购,当顾客A、B、C、D、E来了,主管依次分配了导购A、B、C、D、E,但如果顾客F来了,由于已经没有空闲的导购了,因此顾客F需要排队等待。

等A、B、C、D、E导购其中任何一个服务完成后(比如说导购D),他又重新回到了导购组中,这时主管会将他分配给顾客F。

数据库的链接池也是这个意思,当网站某一天有很大的流量的时候,数据库服务器需要为每次链接创建一次数据库链接。

这样就很浪费数据库的资源,并且频繁的创建和关闭数据库的链接,很容易导致服务器内存溢出等情况发生。

连接池的作用

数据库的连接池负责分配、管理和释放数据库连接对象的。

它允许应用程序重复使用一个现有的数据库的连接对象。而不是重新创建一个。

实现连接池

1.导入mysql模块

首先安装mysql模块:

npm install mysql

导入mysql模块:

const mysql = require("mysql");

2.创建数据库连接池

创建数据库连接池语法如下:

const pool = mysql.createPool({
    host: "数据库服务器地址",
    port: 3306, // MySQL数据库端口号
    database: "数据库名",
    user: "连接数据库的用户名",
    password: "连接数据库的密码",
    connectionLimit: "指定连接池中最大的链接数,默认是10",
    queueLimit: "指定允许挂起的最大连接数,如果挂起的连接数超过该数值,就会立刻抛出错误,默认属性值为0,代表不允许被挂起的最大连接数",
    multipleStatements: "是否运行执行多条sql语句,默认值为false"
})

示例:创建数据库连接池

const mysql = require("mysql");
const pool = mysql.createPool({
    host: "127.0.0.1", // 主机地址
    port: 3306,
    database: "info", // 数据库名字
    user: "root", // 连接数据库的用户名
    password: "123456", // 连接数据库密码
    connectionLimit: 20, // 连接池最大连接数
    multipleStatements: true // 允许执行多条sql语句
})
module.exports = pool;

3.从连接池中获取一个连接

语法:

pool.getConnection(function (err, connection) {
    // 代码
});
  • err:该参数是指操作失败时的错误对象。
  • connection:该值为一个对象,代表获取到的连接对象。当连接失败时,该值为undefined。

4.释放连接对象(放回连接池)

connection.release();

5.从连接池中移除连接对象

connection.destory();

6.关闭该连接池

pool.end();

案例

使用连接池连接MySQL数据库,查询info数据库中stu表中的所有信息,

stu表具体如下:

创建mydb.js,创建数据库连接池,代码如下:

const mysql = require("mysql");

// 创建数据库连接池
const pool = mysql.createPool({
    host: "localhost",
    port: 3306,
    user: "root",
    password: "123456",
    database: "info",
    connectionLimit: 20,
});

// 将数据库连接池对象导出
module.exports = pool;

创建test.js文件,使用连接池查询数据库,代码如下:

const express = require("express"); // 导入express
const app = express(); // 创建实例
const pool = require("./mydb"); // 导入连接池
// http://localhost:3000/test
app.get("/test", ((req, res) => {
    // 从连接池中获取数据库的连接对象
    pool.getConnection(function (err, conn) {
        if (err) {
            console.log("数据库连接失败");
        } else {
            console.log("数据库连接成功");
            // 定义sql查询语句
            let sql = "select * from stu";
            // 查询操作
            conn.query(sql, function (err, result) {
                if (err) {
                    console.log("数据库查询失败");
                } else {
                    res.send(result);
                    conn.release();
                }
            })
        }
    })
}))
// 监听3000端口
app.listen(3000);

启动服务器,在浏览器中打开http://localhost:3000/test,会看到成功查询到了表stu中的数据。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • nodejs前端自动化构建环境的搭建

    nodejs前端自动化构建环境的搭建

    本文这里给大家介绍的是nodejs中前端自动化构建环境的搭建方法,非常的细致全面,有需要的小伙伴可以参考下
    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爬虫的实现方法

    用Electron写个带界面的nodejs爬虫的实现方法

    这篇文章主要介绍了用Electron写个带界面的nodejs爬虫的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • express结合nodejs开启服务示例模版

    express结合nodejs开启服务示例模版

    这篇文章主要为大家展现了express结合nodejs开启服务的代码示例模版,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 从零学习node.js之文件操作(三)

    从零学习node.js之文件操作(三)

    这篇文章主要给大家介绍了关于node.js中对文件和目录的操作,我们不一个个讲每个api的使用,只是从几个例子来了解下下文件系统。需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • 利用node 判断打开的是文件 还是 文件夹的实例

    利用node 判断打开的是文件 还是 文件夹的实例

    今天小编就为大家分享一篇利用node 判断打开的是文件 还是 文件夹的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 深入理解Node.js中通用基础设计模式

    深入理解Node.js中通用基础设计模式

    大家在谈到设计模式时最先想到的就是 singletons, observers(观察者) 或 factories(工厂方法)。本文重点给大家介绍Node.JS一些基础模式的实现方法,感兴趣的朋友跟随脚本之家小编一起学习吧
    2017-09-09
  • Vue+Node实现的商城用户管理功能示例

    Vue+Node实现的商城用户管理功能示例

    这篇文章主要介绍了Vue+Node实现的商城用户管理功能,结合实例形式详细分析了商城用户管理的前台登录、校验、跳转、退出等相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • 开发Node CLI构建微信小程序脚手架的示例

    开发Node CLI构建微信小程序脚手架的示例

    这篇文章主要介绍了开发Node CLI构建微信小程序脚手架,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • node中间层实现文件上传功能

    node中间层实现文件上传功能

    这篇文章主要介绍了node中间层实现文件上传功能,本文给大家介绍的非常详细,需要的朋友可以参考下
    2018-06-06

最新评论