节点redis - id生成竞争条件

时间:2017-12-28 09:45:23

标签: node.js redis transactions

多个进程可以访问我的redis商店。添加新的用户哈希时,我执行以下步骤:

  1. incr userId
  2. 设置用户:[递增的userId] ...
  3. 如何将这些步骤捆绑到交易中?

    const client = require('redis').createClient();
    
    client.on("connect", () => {
        const multi = client.multi();
        multi.incr("userId", (userId) => {
            console.log("new userId is %s", userId);    // TODO userId should not be null
            multi.set("user:"+userId, {name:"UserName"} );
        });
        multi.exec();    // TODO after the execution I expect to see the key user:null using redis-cli, but it does not exist
    });
    

1 个答案:

答案 0 :(得分:0)

您不能在同一事务中使用对事务的操作的回复,但在您的情况下也不需要这样做 - INCR操作是原子操作并保证返回无竞争独特的价值。