Node.js + Express + Redis,何时关闭连接?
Posted
技术标签:
【中文标题】Node.js + Express + Redis,何时关闭连接?【英文标题】:Node.js + Express + Redis, when to close connection? 【发布时间】:2014-04-18 16:37:42 【问题描述】:我有一个使用Express 和node_redis 的Node 应用程序。我正在遵循Learning Node 书中概述的方法,并为应用程序的生命周期创建一个客户端。鉴于这种方法,我什么时候在 redis 客户端上调用close()
?我还需要吗?
相关代码
var express = require( 'express' ),
redis = require( 'redis' );
var app = express(),
config = require( './config/application' )[ app.get( 'env' ) ];
// create Redis client
var redisClient = redis.createClient();
redisClient.on( 'error', function( err )
console.log( 'Error' + err );
);
// select the database
redisClient.select( config.redis_database );
...
/* more setup, route defintions, etc. */
...
http.createServer( app ).listen( 4000, function()
console.log( 'Server started and ready for action!' );
);
【问题讨论】:
【参考方案1】:您有几个选择。
-
懒惰并为redis服务器上的所有客户端设置空闲超时。然后,当客户端空闲时间过长时,服务器就会终止他们的连接。
节点进程退出时终止连接。
.
process.on("exit", function()
redisClient.quit();
);
【讨论】:
您只能在“exit”事件处理程序中执行同步操作。该进程将在任何“退出”命令发送到 redis 服务器之前终止。 close() 函数不存在。使用 redisClient.quit(); 如果你无论如何都在杀死节点进程,为什么你需要显式“退出”redis客户端?当节点进程死亡时,任何与之关联的连接资源都将被释放/断开。【参考方案2】::这个问题是 3 年前的问题,你可能已经得到了答案,无论如何这对一些新人来说可能有用。
您可以让nodejs进程监听SIGINT
,这是通过以下代码从键盘发送的中断
process.on('SIGINT', function()
redisClient.quit();
console.log('redis client quit');
);
然后您可以通过键盘Ctrl+C
,或通过kill -SIGINT <process id>
发送此类信号。发生这种情况时,将执行该代码。
这是我们不知道何时退出 redis 客户端的确切时间,或者我们希望外部控制干净地退出/清除我们正在使用的资源。
【讨论】:
除了 SIGINT,听 SIGTERM 来处理kill <process id>
命令也可能会有所帮助
@ifelsemonkey 这也很有意义。以上是关于Node.js + Express + Redis,何时关闭连接?的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的简单 Express 应用中使用 Node.js 集群?
Docker + fig / compose + nginx + node.js + mysql + redis