收藏
回答

排队取号的功能,如何用云开发解决并发的问题?

大家好,我想用云开发做一个类似餐厅排队叫号的微信小程序,让客户自己在手机上点击取号,取餐号是连续并且不重复的。

取号的逻辑,我想的是:首先查询当前排队序号,然后+1,把更新后的排队序号返回给用户,并且存储在数据库;下一位用户读取更新后的序号,继续+1后返回给用户,再存储在数据库...就这样延续下去。

就是说我先进行一次读取操作,然后再+1更新数据。后面的用户在此基础上取号。

我头疼的是,如果几十个人同时在自己手机上点击按钮取号,要怎么防止取餐号给重复呀?

同时取号,多个用户的请求并发,数据库估计来不及走完“读取—更新—存储”的操作。那他们得到的排队序号肯定有重复的。

求各位大佬指点下,要怎样处理这种并发的情况,或者有哪些文档可以学习的。

回答关注问题邀请回答
收藏

2 个回答

  • Larry
    Larry
    2022-03-02

    有个思路,用事务操作。用一条记录保存当前的序号,请求取号的时候,用事务操作给序号自增+1,然后读取,释放事务操作,再按普通的操作记录这个序号。因为事务操作有事务锁,可以保证同一时间只有一个自增操作。

    https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/transaction.html

    2022-03-02
    有用 1
    回复
  • 陈天水
    陈天水
    2022-03-02

    有大佬提示了,用addToSet原子操作,把用户的openid存入队列数组,这样用户的openid位置肯定就是固定的,然后我们就直接读取更新后的队列数组,取出位置信息就行了。大佬真牛

    2022-03-02
    有用
    回复 2
    • 老张
      老张
      2022-03-02
      汗。我还想先写一篇文章再回复链接的。。。
      2022-03-02
      回复
    • 陈天水
      陈天水
      发表于移动端
      2022-03-03回复老张
      哈哈,写完了求个文章链接,学习下
      2022-03-03
      回复
登录 后发表内容