抽奖活动+mysql_简单的活动抽奖算法&方案

本文介绍了线上抽奖算法的两种实现方式:随机区间法和自增匹配法,并结合实际案例探讨了库存管理,特别是利用Redis进行高并发下的抽奖数据一致性处理。通过PHP代码示例展示了算法的具体应用。
摘要由CSDN通过智能技术生成

4ddb5fdc3b20134cdfb528546adb9b6c.png

前言

只要是有营销的场景,抽奖可以说几乎是必不可少的功能,如何基于一个简单的抽奖逻辑去支撑种类繁多的抽奖方案,结合之前的经验,总结如下。

原理

其实不论上层的抽奖方案是什么(例如,大转盘,刮刮乐,扎气球、砸金蛋等),都只是展示层的提现形式不一样,底层都可以使用同一个抽奖算法。

想想,如果是线下举办抽奖,一般会有哪些方案?

可预估奖品数

主动式,抽奖券500份,其中有奖品的只有10份,然后给用户抽,抽中就是你的。例如:买汽水的瓶盖抽奖,刮刮乐。

被动式,带ID的抽奖券500份,给用户抽,然后系统随机抽取10个ID发放奖品。例如:发布会入场券抽奖

不可预估奖品数

用户自己填信息的抽奖券,到时候由系统随机生成一个数,比对一致的就即为中奖者。例如:彩票。

其实线上的抽奖算法,基本上也是基于模拟线下场景方案来模拟的。但绝大多数场景都是黑盒操作,执行抽奖,中间的过程用户是无法获知的。

算法

1、随机区间法

这个方法随机度高,根据概率论来计算,每个用户的单次中奖概率为中奖概率=奖品数/预估抽奖用户人数

54036a3390435cebd853905f1bac5ab0.png

如图所示,上面是一个奖品的分配区间,例如预计抽奖100W人,1等级1个,2等奖3个,3等奖5个,4等奖10个,其余999981都是谢谢惠顾。用户抽奖的时候,获得一个随机数,判断是否在中奖区间即可。发放奖品,则区间内的奖品剩余数-1;回收奖品,则区间内的奖品+1。

8a68b016e8c981df1db35498b2eefded.png

当一个奖品被抽完之后,从奖品区间移除(谢谢惠顾一般不算奖品),其余继续抽奖,例如上图的10个4等奖被抽光了。而当所有奖品都抽光了,就会只剩下一个谢谢惠顾的区间,这样用户不论怎么抽,都只会是谢谢惠顾,直到活动日结束。如果需要限制总抽奖次数,则将谢谢惠顾的部分也纳入库存,最终库存全部消耗完,随即提示用户抽奖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值