求php高并发下抽奖程序,如何处理重复中奖及多人抽中同一个奖
程序员文章站
2022-05-03 14:41:58
...
求php高并发下抽奖程序,如何避免重复中奖及多人抽中同一个奖?
我的做法是比如:一等奖:1个,二等奖:2个,三等级:3个,这样有奖项为6,假如100人同时参与抽奖,那么空奖项为100-6=94项。
首先从数据库mysql查询出有奖项6个的唯一编号作为兑奖号:
sql1:
$sql="select 唯一编号 from table where status=0";
得到数组$real=array('001','002','003','004','005','006',);其中001,002就是唯一编号
然后生成94个空奖
$empty=array('','',...,'',);
最后把数组合并,得到一个全新的数组。
$arr = array_merge($real, $empty);
用户随机在数组中抽取一项
$rand= mt_rand(0, count($arr)-1);
比如$rand抽到了001
if(''!=$rand){
//表示抽中,修改数据状态,这里需要操作数据库
sql2:
$sql="update table set status=1 where 唯一编号=001";
操作完成
}else{
//表示没有抽中,不做操作。
}
现在的问题是当100人同时进入抽奖,在红色部分sql2,还没有来的急修改状态的情况下,sql1继续会把001作为没有抽中的奖项,来让其他用户继续抽,这样有可能001再次被抽到。
想请大家帮助php高并发下抽奖程序,如何避免重复中奖及多人抽中同一个奖?
或者从别的思路出发考虑抽奖程序。
我的做法是比如:一等奖:1个,二等奖:2个,三等级:3个,这样有奖项为6,假如100人同时参与抽奖,那么空奖项为100-6=94项。
首先从数据库mysql查询出有奖项6个的唯一编号作为兑奖号:
sql1:
$sql="select 唯一编号 from table where status=0";
得到数组$real=array('001','002','003','004','005','006',);其中001,002就是唯一编号
然后生成94个空奖
$empty=array('','',...,'',);
最后把数组合并,得到一个全新的数组。
$arr = array_merge($real, $empty);
用户随机在数组中抽取一项
$rand= mt_rand(0, count($arr)-1);
比如$rand抽到了001
if(''!=$rand){
//表示抽中,修改数据状态,这里需要操作数据库
sql2:
$sql="update table set status=1 where 唯一编号=001";
操作完成
}else{
//表示没有抽中,不做操作。
}
现在的问题是当100人同时进入抽奖,在红色部分sql2,还没有来的急修改状态的情况下,sql1继续会把001作为没有抽中的奖项,来让其他用户继续抽,这样有可能001再次被抽到。
想请大家帮助php高并发下抽奖程序,如何避免重复中奖及多人抽中同一个奖?
或者从别的思路出发考虑抽奖程序。
并发 php 抽奖
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
- 最新文章
- 热门排行
上一篇: 求 数据库的update语句有关问题
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论