私信  •  关注

isuru89

isuru89 最近创建的主题
isuru89 最近回复了
6 年前
回复了 isuru89 创建的主题 » 具有持久连接的nodejs(mysql/redis)

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

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

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

游泳池照管 server reconnections 自动地。

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

如: 在 Db.js 文件如下并导出。

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.query pool.getConnection 基于场景。使用 query 更安全,因为您不需要考虑释放连接。它将由库自动处理。 getConnection 仅在必须在端点内运行多个查询时使用,因此我可以重用相同的连接来执行此操作。

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

简而言之,你 不要 需要为Redis提供池。我们不考虑根据 this .