问题1:单机模式下的超卖问题
平价券表结构:
秒杀券表结构:
订单表结构:
基于Redis设计秒杀优惠卷功能:
前提:选择redis做全局ID生成器,是一种在分布式系统下用来生成全局唯一ID的工具。 唯一性 高可用 高性能 递增性 安全性
Redis 提供了 INCR 命令做自增,自增操作在分布式系统中如何保证一致性的问题。
定义为64位数字:为了增加 ID 的安全性,我们可以不直接使用 Redis 自增的数值,而是拼接一些其它信息: ID 组成部分:
* 符号位:1 bit,永远为 0 时间戳:31 bit,以秒为单位,可以使用 69 年 序列号:32 bit,秒内的计数器,支持每秒产生 2^32 个不同的 ID
UUID实现原理java代码:
设计业务逻辑:
1. 用户提交优惠券id
2. 根据优惠券id查询优惠券信息
3. 判断秒杀是否开始或结束,如果秒杀尚未开始或已经结束就直接返回错误信息
4. 判断库存是否充足,如果库存数量小于1就直接返回错误信息
5. 根据用户id和订单id查询订单,判断该用户是否下过单,如果下过单就直接返回错误信息
6. 扣减库存
7. 创建购买优惠券的订单
8. 扣减库存和创建订单逻辑原始代码,使用@Transactional注解