3
回答
抽奖转盘如何控制同时抽奖时的中奖问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
抽奖转盘如何控制同时抽奖中奖,奖品数量是从数据库读的,同时抽奖有可能造成中奖数量超出的问题,主要是因为前一个人抽奖的时候,抽到了,还没往数据库插入数据,后面一个人查到奖品还有,然后也 后就中奖了。请问各位大神如何解决。
举报
钱钱磊
发帖于5年前 3回/3K+阅
共有3个答案 最后回答: 5年前
同步问题。首先把处理逻辑,包括抽奖前的判断和抽奖后的提交更新,集中到一个方法执行,然后将其置为同步(synchronized)。这是最简单的解决方案。
--- 共有 2 条评论 ---
捏造的信仰在这个基础上,再将数据库操作优化为缓存方式,速度就很快了,不会发生阻塞。 5年前 回复
钱钱磊这个多个人同时点击的时候会不会阻塞?难道要使用队列进行排队? 5年前 回复

用事务吧... 读取奖品数量到插入数据 整个做成一个事务.

--- 共有 2 条评论 ---
酒逍遥回复 @钱钱磊 : 哦 是加锁的问题.读取奖品数量的同时锁定.不允许其他程序读.当判断完是否中奖之后解锁 5年前 回复
钱钱磊这个不对吧,事务貌似控制不了吧,你中到奖品了,然后事务还没提交,说明数据库中奖品数量还没更新吧,其他人查到的时候的还是有奖品的,主要是如何解决数据脏读的问题。 5年前 回复

这个一般都是先抽奖再转。就是先抽取出一个奖品,返回给JS,JS再转到指定位置,就不存在你说的抽到了但奖品不存在的问题。

数据库层面那就是锁和事务了

--- 共有 2 条评论 ---
傲罗这种方式是你先判断这个人会不会中奖,以及什么奖品,然后再传递给页面,让这个js程序来对应执行,就不存在什么超出了。不然超出转之前就提示已经送完了。 5年前 回复
钱钱磊不是这样的,主要是控制奖品数量的问题。抽到什么显示什么这个没有问题,现在主要是奖品数量超出了。 5年前 回复
顶部