我想知道与MySQL / Redis建立/维护连接的最佳方法是什么(来自nodejs
):存储在单个对象(conn
)中还是在每个请求上创建一个新连接?即:
1,我们是否应对每个nodejs http请求使用单个连接?使用连接池?还是每个新请求都有一个连接(因此重新连接很重要,因为连接可能会随机丢失)?表现如何?
2,就维护这种连接而言,MySQL和Redis有什么区别?
答案 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.query
和pool.getConnection
。使用query
更安全,因为您无需考虑释放连接。它将由库自动处理。 getConnection
仅用于必须在端点内运行多个查询的地方,因此我可以重用同一连接来做到这一点。
2,就维护这种连接而言,MySQL和Redis有什么区别?
简而言之,您不需要,需要集中存储redis。我们不考虑根据this合并redis连接。