抢红包的交互步骤如下:
- 抢红包:抢操作在 Redis 缓存层完成,通过原子递减的操作来更新红包个数,到 0 后就说明抢光了 。
- 拆红包:拆红包时,首先会实时计算金额,一般是通过二倍均值法实现(即 0.01 到剩余平均值的 2 倍之间) 。
- 红包记录:用户获取红包金额后,通过数据库的事务操作累加已经领取的个数和金额,并更新红包表和记录表 。
- 转账:为了提升效率,最终的转账为异步操作,这也是为什么在春节期间 , 红包领取后不能立即在余额中看到的原因 。
6.3 红包分配算法红包金额分配时,由于是随机分配 , 所以有两种实现方案:实时拆分和预先生成 。
1、实时拆分实时拆分,指的是在抢红包时实时计算每个红包的金额 , 以实现红包的拆分过程 。
这个需要我们设计一个好的拆分算法,让红包拆分时一直保证后续待拆分红包的金额不能为空 。
实时拆分时 , 不容易做到拆分的红包金额服从正态分布规律 。
2、预先生成预先生成,指的是在红包开抢之前已经完成了红包的金额拆分,抢红包时只是依次取出拆分好的红包金额 。
这种方式对拆分算法要求较低,可以拆分出随机性很好的红包金额 , 但通常需要结合队列使用,而且需要多设计一个表来存储红包的拆分金额 。
3、二倍均值法综合上述优缺点考虑,以及微信群聊中的人数不多(目前最高 500 人) , 所以我们采用实时拆分的方式,用二倍均值法来生成随机红包,只满足随机即可,不需要正态分布 。
故可能出现很大的红包差额,但这更刺激不是吗
【听说你会架构设计?来,弄一个微信群聊系统】
推荐阅读
- 时尚中短发、展现绝美女人气质,你会爱上哪款呢
- 当听说汪峰拥有30亿资产,葛荟婕的回应亮了,真是人间清醒
- 如何从单体架构迁移到微服务架构:挑战和最佳实践
- 《听说很好吃》删光杨颖!后期技术精进,P得只剩1条辫子,白录了
- 架构师必备的37项技能清单
- 浅谈HBase数据结构和系统架构
- 杨颖彻底被封杀!被节目《听说很好吃》删光镜头,网友:活该
- Spring Cloud微服务架构:构建弹性和可伸缩的云原生应用
- 鲁豫到李连杰家吃饭,李:听说你每天只吃20粒米饭,饿了就喝水?
- 国庆档最佳的5部电影,有质量有口碑,你会选择哪一部二刷?
