Node.js + Express + Redis,何时关闭连接?

时间:2014-03-13 18:04:31

标签: node.js express node-redis

我有一个使用Expressnode_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!' );
});

2 个答案:

答案 0 :(得分:6)

你有几个选择。

  1. 延迟并为redis服务器上的所有客户端设置空闲超时。然后当客户端闲置太久时,服务器就会终止它们的连接。
  2. 在节点进程退出时终止连接。
  3. process.on("exit", function(){
        redisClient.quit();
    });
    

答案 1 :(得分:1)

:问题是3年前,你可能已经得到了答案,无论如何这可能对一些新人有用。

你可以让nodejs进程监听process.on('SIGINT', function() { redisClient.quit(); console.log('redis client quit'); }); ,这是通过以下代码从键盘发送的中断

Ctrl+C

然后您可以从键盘上kill -SIGINT <process id>,或通过{{1}}发送此类信号。当发生这种情况时,将执行该代码。

这时我们不确切知道何时退出redis客户端,或者我们希望外部控制干净地退出/清除我们正在使用的资源。