各种抽奖活动开发总结及分析

在全部活动总,抽奖活动占的比例是很是大的,现对已开发过的抽奖活动进行一个总结分析及评比思考php

抽奖活动在整理上能够分为如下几种类型:前端

  1. 不限制人数,不设置奖品数量上限,只设置中奖几率
  2. 不限制人数,设置奖品数量上限,设置中奖几率
  3. 不限制人数,设置部分奖品数量上限部分没有上线,设置中奖几率
  4. 限制人数,人人中奖,设置中奖几率
  5. 限制人数,设置奖品数量上限,设置中奖几率
  6. 限制人数,设置部分奖品数量部分不设置数量上限,设置中奖几率

先解决几率设置问题

在整个抽奖程序中,几率的设置是相当重要的,那么设置几率有哪些方法呢算法

  1. 方法1:经过随机数获取几率,使用到的PHP函数有: rand 这种方法是不能控制中奖几率的,也就是随机的几率
  2. 方法2:经过事先设置好的中奖几率数组来随机从数组中抽取一个值来做为得到的奖品等级,使用到的PHP函数有: array_rand array_merge array_fill 这种方法是能够控制中奖的几率,可是每一次的中奖几率都是同一个概率的
  3. 方法3:经过网络上的经典算法来实现中奖几率

再解决奖品数量的问题

每一次中奖后,在有数量限制的奖品中都须要减小,这种数量的减小就须要写入缓存或者数据库中了数据库

一旦奖品数量为0就须要降级处理或者设置为必中的奖品或者设置为未中奖后端

固然,每个中奖记录咱们都须要保存到数据库中数组

举例说明

不限制人数,不设置奖品数量上限,只设置中奖几率

这种通常是虚拟类奖品的赠送,例如红包、积分等缓存

奖品 数量 几率 获奖等级
5元现金红包 不限制 40% 4
10元现金红包 不限制 30% 3
20元现金红包 不限制 20% 2
50元现金红包 不限制 10% 1

这种抽奖活动的实现就可使用方法2和方法3啦,先获取几率,再记录并写入数据库,返回中奖结果网络

不限制人数,设置奖品数量上限,设置中奖几率

这种通常是实物类的奖品抽奖,会有未中奖选项存在的iphone

奖品 数量 几率 获奖等级
小米充电器 40 40% 4
电烤箱 30 30% 3
ipad 20 20% 2
iphone 10 10% 1

这种抽奖活动的实现思路就是在奖品出来后判断一次奖品是否发送完成,若是发送完成则提示未中奖函数

不限制人数,设置部分奖品数量上限部分没有上线,设置中奖几率

这种通常是有实物和虚拟结合的,也有是纯实物的,只是有一款实物的成本很低很低

奖品 数量 几率 获奖等级
5元现金红包 不限制 40% 4
电烤箱 30 30% 3
ipad 20 20% 2
iphone 10 10% 1

这种抽奖活动的实现思路就是在奖品出来后判断一次奖品是否发送完成,若是发送完成则将中奖的等级更新为必中的奖品便可

限制人数,人人中奖,设置中奖几率

这种通常是现场活动下的抽奖游戏,人人参与人人中奖,数量很少

奖品 数量 几率 获奖等级
小米充电器 不限制 40% 4
电烤箱 30 30% 3
ipad 20 20% 2
iphone 10 10% 1

这种活动的实现思路是: 一次将奖品写入到缓存或者数据库中,每次读取一条数据并更改状态

限制人数,设置奖品数量上限,设置中奖几率

这种通常是出如今现场和线上的指定人数参与的抽奖活动

奖品 数量 几率 获奖等级
小米充电器 不限制 40% 4
电烤箱 30 30% 3
ipad 20 20% 2
iphone 10 10% 1

这种活动的实现思路是: 一次将奖品写入到缓存或者数据库中,每次读取一条数据并更改状态,而且要写入未中奖的数据

限制人数,设置部分奖品数量部分不设置数量上限,设置中奖几率

这种就至关因而必中啦,只是必中的必定是不设置上限的奖品

奖品 数量 几率 获奖等级
小米充电器 不限制 40% 4
电烤箱 30 30% 3
ipad 20 20% 2
iphone 10 10% 1

这种活动的实现思路是: 在用户抽奖时先判断是不是否超过人数,再根据中奖几率来匹配,若是奖品已经发送完,则强制更新为必中奖项便可

注意:

  1. 在转盘的开发过程当中,要设置一个timeout值,若是请求没有及时返回要要求前端设置一个未中奖的值,最好是再向后台回调请求一次,来解决后端响应缓慢的问题
  2. 指定时间点中奖的抽奖活动其实就是先判断时间点和奖品是否已经发送出去,再来强制性的更改中奖的奖品等级,并写入到数据库
相关文章
相关标签/搜索