【问题标题】:Avoiding race condition with Nodejs Sequelize使用 Nodejs Sequelize 避免竞争条件
【发布时间】:2019-01-10 14:44:13
【问题描述】:

我有一个代码可以更新特定帖子的浏览次数。

我是这样做的:

models.Blog.findById(id).then(blog => {
    models.Blog.update({views: blog.views+1}, {where: {id: blog.id}}).then(blog => {
        //result
   })
})

但如果两个用户尝试同时更新该模型,则会出现竞争条件。

我的问题是如何做同样的事情并避免竞争条件。

【问题讨论】:

标签: node.js sequelize.js


【解决方案1】:

请尝试以下方法:

models.Blog.update({ views: Sequelize.literal('views + 2') }, { where: { id: blog.id }}));

这将解决您的竞争条件。

更多信息:Do Read

【讨论】:

  • 请问幕后发生了什么?它会在不先获取数据的情况下更新视图字段吗?
  • 它将更新字段 y 的最新值,在您的情况下,它从查询中获取数据,然后从您正在更新的查询数据中获取数据,这可能需要一些时间,但这将执行单个查询。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 2010-09-25
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
相关资源
最近更新 更多