小编nig*_*owl的帖子

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

我正在使用node.js和redis,并通过此命令安装了hiredis库

npm install hiredis redis
Run Code Online (Sandbox Code Playgroud)

我看了这里的多个例子:

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

在第17行,它说

// you can re-run the same transaction if you like
Run Code Online (Sandbox Code Playgroud)

这意味着一旦命令完成执行,内部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);
  });
});
Run Code Online (Sandbox Code Playgroud)

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

选项1:我是否应该在http.createServer回调函数中创建多对象,这会在函数执行结束时有效地终止它?创建和销毁这个对象的CPU周期有多贵?

选项2:另一个选项是创建一个新版本的multi.exec(),类似multi.execAndClear(),它会在redis执行一堆命令时清除队列.

你会选择哪个选项?我认为选项1更好 - 我们正在杀死一个对象而不是挑选它的一部分 - 我只是想确定,因为我对节点和javascript都是全新的.

redis node.js

8
推荐指数
1
解决办法
7079
查看次数

标签 统计

node.js ×1

redis ×1