如何保持mysql连接活在node.js
How to keep mysql connections alive in node.js?
我在Node JS中使用mysql连接池。经过一段空闲时间后,连接将过期,下次执行查询时,需要创建一个新连接。这可能导致几秒钟的延迟。不能接受的!
我想实现keepalive功能,以定期轮询数据库,并确保连接到后端一致的健康。我正在寻找其他尝试过相同方法的人的输入,或对我的方法的反馈。
const mysql = require('mysql');
const pool = createConnectionPool();
setInterval(keepalive, 180000); // 30 mins
function keepalive() {
pool._freeConnections.forEach((connection) => pool.acquireConnection(connection,function () {
connection.query('SELECT 1 + 1 AS solution', function (err) {
if (err) {
console.log(err.code); // 'ER_BAD_DB_ERROR'
}
console.log('Keepalive RDS connection pool using connection id', connection.threadId);
})
}));
}
这个keepalive在一定程度上是成功的:
-一旦连接打开,它将保持打开状态
-连接永远不会超时
-如果连接丢失,它会在下一个间隔
这个keepalive是不理想的:
mysql连接池是懒惰的,只在需要的时候创建和恢复连接。有了这个keepalive,池就不再懒惰了。一旦连接打开,keepalive将使其保持打开状态。池不再根据流量扩展。
-我不相信我通过自由连接列表迭代和执行查询的方法将是一个明智的方法。当keepalive正在使用相同的连接时,应用程序是否可能从池中检出相同的连接?
另一种可能的方法是放弃应用程序中的保持连接功能,并依赖心跳流量来保持最小的连接存活。
是否有人尝试实现keepalive功能,使用提供此功能的包或工具,或者最终使用不同的方法?如果使用池连接,您是否尝试过这个
const pool = mysql.createPool({...});
function keepAlive() {
pool.getConnection(function(err, connection){
if(err) { console.error('mysql keepAlive err', err); return; }
console.log('ping db')
connection.ping(); // this is what you want
connection.release();
});
}
setInterval(keepAlive, 60000); // ping to DB every minute
我没有使用pool,这段代码可以工作
function pingdb() {
var sql_keep = `SELECT 1 + 1 AS solution`;
con.query(sql_keep, function (err, result) {
if (err) throw err;
console.log("Ping DB");
});
}
setInterval(pingdb, 40000);
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 如何使用 node.js 比较两个 json 数组
- Node.js's Buffer.writeFloatBE in Javascript
- node.js:setInterval()正在跳过调用
- 如何处理node.js节点mongodb中的连接和查询队列
- Node.js正在更改应用程序以使用集群模块
- 如何使用Node.js最有效地解析网页
- 在openshift node js应用程序中获取请求
- 正在删除node.js中已验证的网站
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 在索引.html和应用.js [node.js] 之间共享变量
- Node.js中的JavaScript原型对象效率
- node.js请求数据事件未在CORS ajax调用中触发
- 使用node.js制作网站
- 使用node.js服务器中的evernote api获取note内容
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- 使用CI和CodeDeploy对node.js应用程序进行连续部署
- 在Node.js中上传和检索图像
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 如何使用 Node JS 获取 JSON 嵌套数组值