- 使用Redis优化高并发场景下的接口性能
- 数据库乐观锁
随着双11的临近,各种促销活动开始变得热门起来,比较主流的有秒杀、抢优惠券、拼团等等。
涉及到高并发争抢同一个资源的主要场景有秒杀和抢优惠券。
前提
活动规则
- 奖品数量有限,比如100个
- 不限制参与用户数
- 每个用户只能参与1次秒杀
活动要求
- 不能多发,也不能少发,100个奖品要全部发出去
- 1个用户最多抢1个奖品
- 遵循先到先得原则,先来的用户有奖品
数据库实现
悲观锁性能太差,本文不予讨论,讨论一下使用乐观锁解决高并发问题的优缺点。
数据库结构
IDCodeUserIdCreatedAtRewardAt奖品ID奖品码用户ID创建时间中奖时间
- 未中奖时UserId为0,RewardAt为NULL
- 中奖时UserId为中奖用户ID,RewardAt为中奖时间
乐观锁实现
乐观锁实际上并不存在真正的锁,乐观锁是利用数据的某个字段来做的,比如本文的例子就是以U