优惠券系统 #
数据建模 #
表结构
- 优惠券基本信息:优惠券名称、发放数量、有效时间、优惠券是否可叠加、每人限领张数、是否和其他促销同时使用(优惠优先级)、使用规则;
- 使用规则可以包含在优惠券ID中,通过“位”表示具体规则。
优惠券发放 #
业务流程
- 运营创建优惠券后,由财务审核;
- 运营创建优惠券发放活动,关联优惠券并配置发放优惠券的活动页;
- 用户在活动页领券;
- 用户下单时使用优惠券完成支付,优惠券可以自动选择也可以由用户指定;
- 后台定时统计优惠券的使用情况,通过报表展示活动效果;
实现步骤
- 创建优惠券时,有n张券就往Redis队列塞入n条记录作为券池。可以将券池拆分为多个分区,降低并发量。
- 后台基于IP+用户ID的组合进行限流,为保证抢券公平性对请求进行排队。
- 用户在活动页领券,领券就是从队列中取出优惠券并和用户绑定。
- 券池数量定时同步到数据库中。
- 根据业务规则决定退回的优惠券是否还需参加发放。
- 全部发放完毕后可以在应用内缓存记录发放完毕,防止Redis热点。
优惠券退还规则
- 用户下单未支付就取消订单,优惠券可退还;
- 商家在订单未完成的情况下,发起退款操作,优惠券可退还;
- 用户下单完成支付后申请退款,优惠券不退还。