嗨,我刚刚阅读了nodejs的mysql包文档。 Lil有点不确定如何使用池化的最佳实践。
var mysql = require('mysql');
var pool = mysql.createPool(...);
pool.getConnection(function(err, connection) {
// Use the connection
connection.query('SELECT something FROM sometable', function (error, results, fields) {
// And done with the connection.
connection.release();
// Handle error after the release.
if (error) throw error;
// Don't use the connection here, it has been returned to the pool.
});
});
我们每次执行查询时都要调用release()方法吗?
还有一个。
使用池直接执行查询与使用getConnection方法然后执行查询有什么区别?代码使用池直接:
var pool = mysql.createPool(...);
pool.query(...)
使用getConnection方法然后执行查询:
pool.getConnection(function(err, connection) {
connection.query(....);
});
如果您要求建立连接,您基本上会保留该连接一段时间。这有两个重要原因:
mysql库无法预测你已经完成了你的事务,这就是你需要发布它的原因。
旁白:您应该考虑查看mysql2
以获得更强大的类似库,并使用promises而不是此回调模式。
根据评论更新
当您直接在池中执行query
时,池将自动获取连接,运行查询并为您释放它。
如果您只需要执行单个查询而不关心事务,这非常有用。