1.是这样的,公司要求发送50万个红包给用户,并且限制了发送的总金额为50万,每个用户抢到的金额都是随机的,该如何保证用户在活动开始的时候,发送红包不会超额的问题。
我想了几种方案:
第一种:
当用户A点击了抽奖的按钮以后:发送一个AJAX请求,后台接收到了以后,锁表,判断金额是否超额,然后减金额,发红包。这个方案在瞬间几十万的请求下,服务器要挂掉。
第二种方案:
还是当用户A点击了抽奖的按钮以后:发送一个ajax请求,后台接收到以后,生成红包的金额,然后将用户的user_id
以及红包金额
存到一张mysql的队列表中,然后开一个新的线程来处理队列中的数据,但是这个线程处理了队列的数据以后,怎么告诉用户红包抢到了的金额以后是否抢成功了。并且我也测试了下服务器每秒钟差不多只能处理2000多个mysql操作,但是如果请求每秒达到几万,那岂不是用户的每个请求要等待很久才能知道自己是否抢成功了?
第三种:
还是当用户A点击了抽奖的按钮以后:发送一个ajax请求,后台接收到以后,生成红包的金额,然后将用户的user_id
以及红包金额
存到一张mysql的队列表中,存进去了以后,就直接调用一个方法来处理队列,但是这样的话,好像挺消耗资源的,感觉不是很合理。
求各位大神,能给小弟指点一下~
直接提前生成一个随机数组,长度50万,值的总和是50万元,然后存入redis。过来的请求直接按顺序到数组中拿金额即可。前50万名能抢到红包。