节点redis - id生成竞争条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了节点redis - id生成竞争条件相关的知识,希望对你有一定的参考价值。

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

  1. incr userId
  2. 设置用户:[递增的userId] ...

如何将这些步骤捆绑到事务中?

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
});
答案

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

以上是关于节点redis - id生成竞争条件的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 viewpager 的异步任务时的竞争条件

为啥“删除”这个无锁堆栈类中的节点会导致竞争条件?

使用 MPI 的竞争条件

侦听firebase数据库节点时如何处理kotlin中的竞争条件

解决 Redis 的并发竞争 Key 问题

互斥与同步