抽奖转盘如何控制同时抽奖时的中奖问题

钱钱磊 发布于 2013/06/03 09:25
阅读 3K+
收藏 0
抽奖转盘如何控制同时抽奖中奖,奖品数量是从数据库读的,同时抽奖有可能造成中奖数量超出的问题,主要是因为前一个人抽奖的时候,抽到了,还没往数据库插入数据,后面一个人查到奖品还有,然后也 后就中奖了。请问各位大神如何解决。
加载中
0
捏造的信仰
捏造的信仰
同步问题。首先把处理逻辑,包括抽奖前的判断和抽奖后的提交更新,集中到一个方法执行,然后将其置为同步(synchronized)。这是最简单的解决方案。
捏造的信仰
捏造的信仰
在这个基础上,再将数据库操作优化为缓存方式,速度就很快了,不会发生阻塞。
钱钱磊
钱钱磊
这个多个人同时点击的时候会不会阻塞?难道要使用队列进行排队?
0
酒逍遥
酒逍遥

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

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

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

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

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