【发布时间】:2011-06-25 15:18:36
【问题描述】:
我正在使用 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 环境中的情况?例如,跟踪最后连接的用户(这实际上不需要 multi,因为它只执行一个命令但很容易遵循)
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.createServer 回调函数中创建多对象,这会在函数执行结束时有效地杀死它吗?就 CPU 周期而言,创建和销毁该对象的成本是多少?
选项 2: 另一个选项是创建一个新版本的 multi.exec(),类似于 multi.execAndClear(),它会在 redis 执行时清除队列 一堆命令。
你会选择哪个?我想选项 1 更好——我们正在杀死一个对象而不是挑选其中的一部分——我只是想确定一下,因为我对 node 和 javascript 都是全新的。
【问题讨论】: