具有持久连接的Node.js(MySQL / Redis)

时间:2018-11-15 01:49:50

标签: mysql node.js database redis

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

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

2,就维护这种连接而言,MySQL和Redis有什么区别?

1 个答案:

答案 0 :(得分:0)

我会告诉你我以前是怎么做到的。

  

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连接。