云开发能否处理秒杀或者电商中超卖的问题?
发布于 6 年前 作者 xiulan46 8616 次浏览 来自 问答
  • 需求的场景描述(希望解决的问题)

比如在秒杀的场景,怎么处理超卖的问题?

是否能给某次读写加锁,或者其他解决方案?

  • 希望提供的能力

云函数读写加锁或者其他能够保证读写过程中没有其他写入操作。

3 回复

没有锁的

数据可能重复

你好,云开发数据库暂时并不提供显式的事务和锁,但是对于单条数据的操作仍然能保证原子性。

对于你的需求,推荐临时这样处理:

  1. 数据库中建一个活动,并加一个 goodsLeft 字段(number 类型),表示剩余多少商品

  2. 通过这样的代码执行抢购:
    db.collection('activity').where({
        activity_id: _.eq("test1"),
        goodsLeft: _.gt(0)
      }).update({
        data: {
          goodsLeft: _.inc(-1) //每次把剩余商品数减一
        }
      }).then(function(d){
        if(d.stats.updated>0) { /*抢购成功*/ }
        else { /*抢购失败*/ }
      })

云开发处理秒杀还是算了吧,以现有的云开发能力也就做做增删改查的事情

回到顶部