Node.js,(Hi)Redis和multi命令

我正在玩node.js和redis,并通过这个命令安装了hiredis库

npm install hiredis redis 

我看了这里的多个例子:

https://github.com/mranney/node_redis/blob/master/examples/multi2.js

它在第17行说

 // you can re-run the same transaction if you like 

这意味着一旦命令执行完成,内部的multi.queue对象就不会被清除。

我的问题是:你将如何处理在http环境中的情况? 例如,跟踪最后一个连接的用户(这不是真的需要多个,因为它只是执行一个命令,但很容易遵循)

 var http = require('http'); redis = require('redis'); client = redis.createClient() multi = client.multi(); http.createServer(function (request, response) { multi.set('lastconnected', request.ip); // won't work, just an example multi.exec(function(err, replies) { console.log(replies); }); }); 

在这种情况下,multi.exec将为第一个连接的用户执行1个事务,并为第100个用户执行100个事务(因为内部multi.queue对象从不清除)。

选项1:我应该在http.createServercallback函数中创build多对象,这将在函数执行结束时有效地终止它? 在CPU周期方面是多么昂贵的创build和销毁这个对象是?

选项2:另一种select是创buildmulti.exec()的新版本,比如multi.execAndClear(),它会在redis执行一堆命令的那一刻清除队列。

你会select哪个选项? 我想选项1更好 – 我们杀死一个对象,而不是樱桃采摘部分 – 我只是想确定,因为我是节点和JavaScript的全新。

node_redis中的多个对象创build起来非常便宜。 作为一个副作用,我认为让你重新使用它们会很有趣,但是这显然只在某些情况下才有用。 每次需要新的事务时,请继续创build一个新的多对象。

需要注意的一点是,如果您真的需要在Redis服务器中以primefaces方式执行的所有操作,则只应使用multi。 如果您只是为了节省networking带宽并减less需要pipe理的callback数量而高效地批量处理一系列命令,只需逐个发送各个命令即可。 node_redis会自动将这些请求“pipe道化”到服务器,并依次调用各个命令callback函数(如果有的话)。