抢红包设计(预分配法)

大致设计

常见软件QPS
    Nginx  单机理论能达到30w左右的QPS
    Redis  单机可以承受8W+的QPS,理论可以达到10wQPS
    Mysql  单机只有4k左右的QPS
  • 创建红包 

  红包拆分算法

    • 二倍均值法(每个人获得的红包金额差不多)
math.Max(0.01,   money / member * 2)  

假设有10个人,红包总额10元。
10/10X2 = 2, 所以第一个人的随机范围是(0.01,2 )
假设第一个人随机到 1 元,那么剩余金额是 10-1= 9 元。
9/9X2 = 2, 所以第二个人的随机范围同样是(0.01,2 ),平均可以抢到1元。
    • 随机数线段切割法(抽到的红包面额差距很大)      
当n个人一起抢总金额为m的红包时,我们需要做n-1次随机运算,以此确定n-1个切割点。
随机的范围区间是[1, m-1]。
开始1和结束是m-1的原因是最少分配1分钱(这里1表示一分)
[0,1]一段,[m-1,m]一段(最小的情况)
  • 抢红包

适用场景

  • 抢红包活动不多,整个系统会消耗大量Redis内存
  • QPS不高,上述系统理论可支持十多万QPS(Redis部署为集群模式,红包数据可散列存储到不同分片提升QPS) 

      

posted @ 2024-07-16 19:08  FCmmmmmm  阅读(16)  评论(0编辑  收藏  举报