Redis.io多个multi() - 它们可以是原子的吗?

时间:2012-11-01 22:05:30

标签: node.js redis

我的第二个multi()调用需要第一个multi()的结果。但是我希望所有来自multi()的命令都以原子方式执行。我怎么能这样做?

这是使用node.js客户端。

db.multi()
    .incr('next:user:id')
    .sadd('users:facebookid', facebookId)
    .exec(function(err, replies)
    {
        var newUserId = replies[0];
        // if something fails in this multi(), then the previous multi() shouldn't be executed either.
        db.multi()
        .hmset('user:' + newUserId , 'facebookId', facebookId, 'name', userName)
        .incr('users:count')
        .exec()

    });

1 个答案:

答案 0 :(得分:1)

您应该能够使用redis EVAL在原子事务中执行复杂的工作。我的理解是将EVAL命令写入tx日志,因此即使redis崩溃,整个命令也会运行完成或根本不执行。