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中的数据。

总结

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

相关文章

  • node.js中的forEach()是同步还是异步呢

    node.js中的forEach()是同步还是异步呢

    这篇文章主要讨论并验证了node.js中的forEach()是同步还是异步,思路和方法分享给大家,有需要的小伙伴可以参考下。
    2015-01-01
  • 手把手教你用Node.js爬虫爬取网站数据的方法

    手把手教你用Node.js爬虫爬取网站数据的方法

    这篇文章主要介绍了手把手教你用Node.js爬虫爬取网站数据,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Node.js有效处理并发连接的过程

    Node.js有效处理并发连接的过程

    在现代 web 开发中,处理并发连接是一个对于构建高性能服务器至关重要的话题,Node.js 是一个使用 JavaScript 作为编程语言的服务器端环境,在这篇博客中,我们将深入探讨 Node.js 如何有效地管理并发连接,并提供一些示例代码以便于更好地理解这个过程
    2024-10-10
  • 前端必会的nodejs知识工具模块使用示例详解

    前端必会的nodejs知识工具模块使用示例详解

    这篇文章主要为大家介绍了前端必会的nodejs知识工具模块使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 完美解决linux下node.js全局模块找不到的情况

    完美解决linux下node.js全局模块找不到的情况

    今天小编就为大家分享一篇完美解决linux下node.js全局模块找不到的情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Nodejs极简入门教程(三):进程

    Nodejs极简入门教程(三):进程

    这篇文章主要介绍了Nodejs极简入门教程(三):进程,本文讲解了Node 进程间通信、cluster 模块等内容,需要的朋友可以参考下
    2014-10-10
  • 详解Node.js中的模块化方法

    详解Node.js中的模块化方法

    这篇文章主要为大家介绍了Node.js的模块化,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Node.js 多进程处理CPU密集任务的实现

    Node.js 多进程处理CPU密集任务的实现

    这篇文章主要介绍了Node.js 多进程处理CPU密集任务的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • node.js学习之事件模块Events的使用示例

    node.js学习之事件模块Events的使用示例

    Nodejs中不存在浏览器中冒泡,捕获这些行为,Nodejs中实现了events这个模块,Nodejs中大多数模块都集成了这个模块,所以events是Nodejs中最重要的一个模块。这篇文章主要给大家介绍了关于node.js学习教程之事件模块Events的相关资料,需要的朋友可以参考下。
    2017-09-09
  • 轻松创建nodejs服务器(4):路由

    轻松创建nodejs服务器(4):路由

    这篇文章主要介绍了轻松创建nodejs服务器(4):路由,服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤,需要的朋友可以参考下
    2014-12-12

最新评论