我会告诉你我过去是如何做到这一点的。
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连接。