抢红包流程
红包生成,数据库中创建红包信息,把红包的ID、数量放入缓存
用户抢红包,分为抢和拆两个动作,抢动作只是决定用户是否得到红包资格,如果抢到了,进入拆动作,此时实时计算红包的金额、记录红包流水记录、入账操作
红包金额的计算方法
随机,额度在0.01和剩余平均值*2之间
例如:发100块钱,总共10个红包,那么平均值是10块钱一个,那么发出来的红包的额度在0.01元~20元之间波动。
当前面3个红包总共被领了40块钱时,剩下60块钱,总共7个红包,那么这7个红包的额度在:0.01~(60/7*2)=17.14之间
高并发下 如何保证红包不被更多人抢走
抢的动作就是对红包剩余数量减一,这个减操作是原子的,缓存的CAS模式来保证操作的唯一性
CAS模式可以理解为:在我获取这个key之后,没人修改过它,我才能成功保存这个key的值
例如当前红包剩余数量为10,此时有很多人同时来抢,也就是要执行多个减一的操作,CAS模式保证了只有一个人能成功完成减一的操作