1***@qq.com
1***@qq.com
  • 发布:2021-05-14 12:52
  • 更新:2022-06-24 11:37
  • 阅读:1809

uniCloud云函数如何处理高并发的问题

分类:uniCloud

操作:请求云函数,数据库先执行更新操作(让其中的字段amount-1),然后查询数据库,返回amount给客户端。

问题:更新和查询都是耗时操作,假如同一时间有100个请求同时进入,首先执行更新数据库操作,可能前20个请求执行更新完了,第一个请求才执行完更新和查询进行返回,这样第一个请求返回的数据就是amount减去20之后的值,而不是减一的,如何应对这种并发场景呢?

'use strict';  
const db = uniCloud.database()  
exports.main = async (event, context) => {  

    const {  
        id  
    } = event  

    //amount减一,更新数据库  
    await db.collection('account').doc(id).update({  
        amount: dbCmd.inc(-1)  
    })  

    //查询数据库  
    let res = await db.collection('account').doc(id).get()  
    res = res.result.data[0]  

    //返回数据给客户端  
    return {  
        code: 0,  
        msg:'请求成功',  
        amount: res.amount  
    }  
};  
2021-05-14 12:52 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

amount减1操作的doc换成where里面除了id之外再加一个条件amount>0

  • 5***@qq.com

    JS是单线程是不是不存在这种并发计算的问题?

    2023-03-08 09:27

要回复问题请先登录注册