抢红包的业务流程大概是设置固定金额及数量的红包,比如1.68元20000个、3.8元20000个、8.8元1000个。
考虑高并发的情况下,我们需要有redis消息队列实现,具体方法如下:
1、创建抢红包活动,将5万份红包随机打乱,并放入redis中,使用队列list类型存储
lpush hongbao 每份红包...
2、访客来抢红包,考虑瞬间会有很多用户访问,这边需要对访客做个队列
lpush users 每个用户...
3、有了两个队列,需要跑一个定时任务,给每个用户分配一个红包
rpop users 弹出一个用户,并rpop hongbao 弹出一个红包。分配的结果存入结果队列。分配时还需要判断该用户是否已中奖,因此中奖时可以另外将已中奖用户存入redis的哈希类型。
4、另外一个定时任务去跑结果队列,将结果入库。