SpringMVC 实现抽奖活动(1.设计部分)

SpringMVC 实现抽奖活动(1.设计部分)

抽奖活动的需求分析如下:

抽奖活动需求分析

争议点:

  • 是否需要保证奖品能抽完,若是则每次中奖的概率会越来越大,否则每次概率保持一样即可

    如果中奖的概率设为1%,则抽100次抽中的概率(样品数每次会减1)为:1 - 99/100 * 98/99*……1/2,大约为百分之八十几

良好的可扩展性、可配置性:

  • 每次用户参与抽奖应同时记录抽奖时间,方便以后需求的扩充
  • 奖品种类和数量的扩充

难点

  • 多实例并发控制,竞争资源(需考虑两个并发场景,1.单用户并发抢码;2.多用户并发抢码)

实现方式

考虑到线上会部署多台实例,故不能在java代码中加锁,需要使用redis分布式锁或者数据库加锁的方式

  • for update悲观锁
  • 基于version的乐观锁

具体实现见下文

Author: Apiao
Link: https://Apiao-1.github.io/2018/10/25/2018-10-25/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.