Redis - 在事务中使用Incr值

rob*_*007 6 transactions redis node.js

是否有可能使用multi.incr(value)multi.hmset

我的意思是:

var name = 'Josh';
var multi = client.multi();
multi.incr('id'); // incr => 1
multi.hmset('user:' + <need incr value here>, 'username', name);
// I want multi.hmset('user:1', 'username', 'Josh');
multi.exec(function(err,data){ .. });
Run Code Online (Sandbox Code Playgroud)

我的目标是增加'id',然后将其设置为事务中的用户ID.我已经读过,我需要做client.watch('id'),但我不明白如何使用它.

PD:请用代码发布你的答案,这是最好的方法:)

Ben*_*ied 18

上面接受的答案是不必要的复杂.在这种情况下,您无需使用多人或手表.INCR已经是原子的,专为这种情况而设计.编辑:感谢Itamar Haber&robe007让接受的答案改变了.:)

你可以这样做:

var name = 'Josh';
client.incr('id', function(err, id) {
    client.hmset('user:' + id, 'username', name);
});
Run Code Online (Sandbox Code Playgroud)

通过执行上述操作,INCR会自动锁定"id"键,为您递增,解锁并返回给您.因此,任何人都无法使用上面的代码获得重复的用户ID.与WATCH/GET不同,它还具有永远不会失败的好处,您必须检查失败并在失败时再次运行查询.