Py学习  »  Redis

具有持久连接的nodejs(mysql/redis)

hiro • 4 年前 • 295 次点击  

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

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37893
 
295 次点击  
文章 [ 1 ]  |  最新文章 4 年前
isuru89
Reply   •   1 楼
isuru89    5 年前

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

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 .