发红包功能和抢红包功能,代码写的比较烂。就不贴了,就简单画个时序图记录一下思路。
整体思路
- 使用缓存控制流量
- 数据库作为数据正确性的兜底。
- 数据库事务中,先获取红包的排他锁,这样其他对同一红包操作线程就只能等待了,可以安心做完自己的处理
- 由于缓存并不100%可靠,增加缓存数据恢复机制,发现缓存数据和数据库不一致情况。加分布式锁恢复数据,其他线程先快速失败
1.数据模型:
1.1红包记录:
字段 | 备注 |
---|
红包id | 字面意思 |
红包总额 | 字面意思 |
红包个数 | 记录分成了几个 |
剩余红包个数 | 剩余数初始=红包个数 |
1.2 红包明细记录:
字段 | 备注 |
---|
红包明细id | 字面意思 |
红包id | 这条明细归属的红包id |
金额 | 记录这个明细是多少钱 |
归属人 | 获得红包的人,初始是空 |
2.时序图
2.1发红包
发红包比较简单,如果担心重复请求的话,可以适当加个锁。
2.2抢红包
抢红包中有些情况会触发2.3,这个功能代表缓存数据修复。
2.3缓存数据修复
由于缓存并不是十分可靠,考虑可能出现缓存和数据库不同步的情况而做出的修复流程。