微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

续集竞争条件 |获取或创建

如何解决续集竞争条件 |获取或创建

我知道以前有人问过这个问题,但就我而言,它看起来不适合。

我们的 postgres 数据库正在复制运行(这可能会导致问题)。这是它的代码

// the following code is wrapped in connection.transaction(async() => { .. })

const user = await models.user.findOne({
    include: [{ model: models.settings,as: 'settings' }],where: { /* some conditions */ }
});

const { settings } = user;

if (!settings) {
    const defaults = getDefaults();
    const created = await models.settings.create(defaults);

    return created;
}
return settings;

我目前正面临同一用户的多个设置条目,这不应该发生。我坚信这是此代码的竞争条件问题。至少 createdAt 时间戳显示重复项的相同值。

在这里使用表/行锁有意义吗?实现会是什么样子?我无法通过 here 中的文档。 level 有什么作用?没有描述。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。