Node.js + Express + Redis, when to close connection?

Bart Jedrocha picture Bart Jedrocha · Mar 13, 2014 · Viewed 12.7k times · Source

I have a Node application that uses Express and node_redis. I'm following the approach outlined in the Learning Node book and creating a single client for the life of the application. Given this approach, when do I call close() on the redis client? Do I even need to?

Relevant code

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!' );
});

Answer

aembke picture aembke · Mar 18, 2014

You have a couple options.

  1. Be lazy and set an idle timeout for all clients on the redis server. Then when a client is idle for too long the server would just kill their connection.
  2. Kill the connection when the node process exits.

.

process.on("exit", function(){
    redisClient.quit();
});