我是否需要使用.quit()退出我的节点redis客户端实例?

kid*_*tal 2 redis node.js

看下面这段代码(取自git页面)

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?
});
Run Code Online (Sandbox Code Playgroud)

我想知道client.quit()是否是可选的,或者multi.exec()是否自动为我退出?我正在尝试在我的redis中调试内存泄漏,我意识到我没有在任何地方使用.quit().我可以做?

意思是,我的代码应该是这样的吗?

client = redis.createClient();
multi = clent.multi();
multi.exec( {something} );
client.quit();
Run Code Online (Sandbox Code Playgroud)

基本上,client.quit去哪里,我甚至需要它?

mal*_*tjo 7

"在发出EXEC之前,MULTI命令排队等待,然后所有命令都由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());
        });
    });
Run Code Online (Sandbox Code Playgroud)

你的问题:我需要使用client.quit()吗?是的,您需要,因为在重新启动redis服务器之前,您的redis连接不会关闭.您应该client.quit()在完成所有流程后使用.(在你的上一次回调中)

  • 此外,如果在完成redis处理后未调用client.unref(),.quit()或.end(),则无法完成访问redis的命令行程序.相反,程序将在完成后挂起,大概是等待连接到redis关闭. (4认同)