2011-12-13 3 views
1

Глядя на это ниже код (взято из git page)Нужно ли мне закрыть экземпляр клиента redis клиента, используя .quit()?

var redis = require("redis"), 
    client = redis.createClient(), multi; 

// runs immediately 
client.mset("incr thing", 100, "incr other thing", 1, redis.print); 
multi = client.multi(); 

// drains multi queue and runs atomically 
multi.exec(function (err, replies) { 
    console.log(replies); // 101, 2 
    client.quit(); // IS THIS OPTIONAL? 
}); 

Я хочу знать, если client.quit() не является обязательным, или если multi.exec() автоматически выполняет бросить меня? Я пытаюсь отлаживать утечку памяти в моем redis, и я понял, что не использую .quit() где угодно. Должна ли я быть?

Смысл, должен ли мой код выглядеть так?

client = redis.createClient(); 
multi = clent.multi(); 
multi.exec({something}); 
client.quit(); 

В принципе, где клиент.куит идти и мне даже нужно?

+0

Я не использую client.quit в своих проектах. –

ответ

5

«Команды MULTI помещаются в очередь до выдачи EXEC, а затем все команды запускаются атомарно с помощью Redis».

Это пример из GitHub:

// multi chain with an individual callback 
client.multi() 
    .scard("bigset") 
    .smembers("bigset") 
    .keys("*", function (err, replies) { 
     client.mget(replies, redis.print); 
    }) 
    .dbsize() 
    .exec(function (err, replies) { 
     console.log("MULTI got " + replies.length + " replies"); 
     replies.forEach(function (reply, index) { 
      console.log("Reply " + index + ": " + reply.toString()); 
     }); 
    }); 

Ваш вопрос: Нужно ли мне использовать client.quit()? Да, вам нужно, потому что ваше redis-соединение не будет закрыто, пока вы не перезапустите сервер redis. Вы должны использовать client.quit(), когда весь ваш процесс будет завершен. (Например, в последнем обратном вызове)

+4

Кроме того, программа командной строки, которая обращается к redis, не будет завершена, если вы не будете вызывать client.unref(), .quit() или .end() после завершения вашей обработки redis. Вместо этого программа будет висеть после завершения, предположительно ожидая закрытия соединения для redis. –

Смежные вопросы