Skip to content
困难

一句话答案

二倍均值法随机金额,Redis List 预生成→Lua 原子 LPOP 抢红包→MQ 异步落库转账。

核心要点

二倍均值法: 每次随机 [0.01, 剩余金额/剩余人数*2]

抢红包流程:

  1. 发红包:预生成金额列表存 Redis List
  2. 抢红包:Lua 原子 LPOP → 记录流水
  3. 异步:MQ → 落库转账

防并发: Redis 单线程 + Lua 原子操作

追问与易错

追问方向:

  • 二倍均值法公平吗?
  • 高并发怎么保证不超发?
  • 过期未领完怎么处理?

易错点:

  • ❌ 随机生成然后扣减——可能总额对不上应预生成
  • ❌ 忽略极端情况——最后一个红包可能很大

💡 记忆锚点

红包三步曲:发——二倍均值法预生成金额列表(每次随机范围[0.01, 剩余/剩余人数*2],保证均匀)存Redis List;抢——Lua原子LPOP(Redis单线程天然防并发,不会超发);落——MQ异步写DB转账流水。预生成是关键:金额总和提前算好存好,抢的时候直接弹出,不现算。