Node.js + Express + Redis, когда закрыть соединение?

У меня есть приложение Node, которое использует Express и node_redis. Я следую подходу, описанному в книге Learning Node, и создаю единый клиент для жизнь приложения. При таком подходе, когда мне вызвать close() на клиенте redis? Мне вообще нужно?

Соответствующий код

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

person Bart Jedrocha    schedule 13.03.2014    source источник


Ответы (2)


У вас есть пара вариантов.

  1. Не поленитесь и установите тайм-аут простоя для всех клиентов на сервере Redis. Затем, когда клиент бездействует слишком долго, сервер просто прерывает его соединение.
  2. Убейте соединение, когда процесс узла завершится.

.

process.on("exit", function(){
    redisClient.quit();
});
person aembke    schedule 18.03.2014
comment
Вы можете выполнять синхронные операции только внутри обработчика событий выхода. Процесс завершится до того, как какая-либо команда выхода будет отправлена ​​на сервер Redis. - person Maxim; 02.04.2015
comment
Функция close () не существует. Используйте redisClient.quit (); - person gyss; 28.07.2015
comment
Если вы все равно убиваете процесс узла, зачем вам явно выходить из клиента redis? Когда процесс узла умирает, любые ресурсы соединения, связанные с ним, в любом случае будут освобождены / отключены. - person Phil; 26.04.2021

: Вопрос был задан 3 года назад, и вы уже можете получить ответ, в любом случае это может быть полезно для некоторых новых людей.

Вы можете заставить процесс nodejs прослушивать SIGINT, который является прерыванием, отправленным с клавиатуры, с помощью следующего кода

process.on('SIGINT', function() {
    redisClient.quit();
    console.log('redis client quit');
});

Тогда вы можете либо Ctrl+C с клавиатуры, либо послать такой сигнал через kill -SIGINT <process id>. Когда это произойдет, этот код будет выполнен.

Это когда мы точно не знаем, когда выйти из клиента Redis, или мы хотим, чтобы внешний контроль полностью закрыл / очистил ресурс, который мы использовали.

person haxpor    schedule 17.08.2017
comment
Помимо SIGINT, также может помочь прослушивание SIGTERM для обработки команды kill <process id>. - person eigenfield; 16.09.2017
comment
@ifelsemonkey, это тоже имеет смысл. - person haxpor; 16.09.2017