【问题标题】:Nodejs with persistent connection (MySQL/Redis)具有持久连接的 Nodejs (MySQL/Redis)
【发布时间】:2019-04-18 01:48:19
【问题描述】:

我想知道与 MySQL/Redis 建立/维护连接的最佳方式是什么(来自nodejs):存储在一个对象中(conn)或在每个请求上创建一个新连接?即:

1,我们应该为每个nodejs http请求使用单个连接吗?使用连接池?或者每个新请求都有一个连接(因此重新连接应该很重要,因为连接可能会随机丢失)?表现如何?

2、MySQL和Redis在维护这种连接方面有什么区别?

【问题讨论】:

    标签: mysql node.js database redis


    【解决方案1】:

    我会告诉你我过去是如何做到这一点的。

    1,我们应该为每个nodejs http请求使用单个连接吗?使用连接池?或者每个新请求都有一个连接(因此重新连接应该很重要,因为连接可能会随机丢失)?表现如何?

    您不想为每个 nodejs http 请求手动创建连接。 总是 use connection pooling 如果您使用的是 nodejs mysqlijs/mysql 模块。我用它。

    池会自动处理server reconnections

    我没有基准,但性能应该更好,因为池内的连接一旦释放就可以重复使用。相信我,在其他方面,手动创建和管理连接既麻烦又容易出错。

    例如: 在Db.js 文件中声明您的 mysql 连接池,如下所示并导出。

    var mysql = require("mysql");
    var pool = mysql.createPool({
       connectionLimit : 5,
       host            : process.env.DB_HOST || 'localhost',
       user            : process.env.DB_USER,
       password        : process.env.DB_PASSWORD,
       database        : 'mydb'
    });
    
    module.exports = db;
    

    并在你内部的另一个文件的端点中使用它。

    var pool = require('./Db.js');
    
    app.get('/endpoint', function (req, res) {
        // ...
        pool.query('<your-query-here>', function (err, res, fields) {
           if (err) throw err;
           // do something with result (res)
        });
    
    });
    

    我更喜欢根据场景同时使用pool.querypool.getConnection。使用query 更安全,因为您不需要考虑释放连接。它将由库自动处理。 getConnection 仅用于必须在端点内运行多个查询的情况,因此我可以重用相同的连接来执行此操作。

    2、MySQL和Redis在维护这种连接方面有什么区别?

    简而言之,您不需要为 redis 进行池化。我们不考虑根据this来池化redis连接。

    【讨论】:

      猜你喜欢
      • 2011-01-16
      • 2011-04-06
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多