Seckill
2022-03-28 21:43:19 2 举报
秒杀系统
作者其他创作
大纲/内容
Y
请求
参考:https://www.imooc.com/learn/632https://segmentfault.com/a/1190000013791430参考:https://blog.csdn.net/lisu061714112/article/details/119218610https://www.jianshu.com/p/d789ea15d060https://blog.csdn.net/qq_28666081/article/details/83043215参考:https://www.cnblogs.com/carsonwuu/p/10399527.html
限流
获取秒杀列表
消息队列
N
事务
显示秒杀按钮
解耦
显示倒计时
Redis:商品余量可用
G:\\WORKING\\CODE\\MYSECKILL├─.idea├─src│ ├─main│ │ ├─webapp│ │ │ ├─WEB-INF│ │ │ │ ├─jsp│ │ │ │ │ └─common│ │ │ │ └─static│ │ │ │ ├─js│ │ │ │ └─img│ │ │ └─resources│ │ │ └─js│ │ ├─java│ │ │ └─hcf│ │ │ └─seckill│ │ │ ├─entity│ │ │ ├─exception│ │ │ ├─controller│ │ │ ├─dto│ │ │ ├─service│ │ │ │ └─Impl│ │ │ ├─dao│ │ │ │ └─cache│ │ │ └─enums│ │ ├─resources│ │ │ ├─mapper│ │ │ └─spring│ │ └─sql│ └─test│ ├─java│ │ └─hcf│ │ └─seckill│ │ ├─dao│ │ │ └─cache│ │ └─service│ └─resources└─target
DB查询数据
下单
数据库
重复秒杀
2. 判断时间是否符合条件
已结束
基础功能设置
input:seckillId,userPhone,MD5
秒杀
1. Redis: 缓存是否存在
3. 判断是否重复购买
高并发问题
判断时间是否符合条件
Redis:放入缓存
秒杀路径: /hcf.seckill/{seckillId}/{md5}/execution 其中的重要信息有:秒杀ID seckillId、通过md5算法处理秒杀ID与salt形成的md5编码(还有cookie中的用户账户信息) 目的:防止别人提前进行秒杀,所以通过这种加密的方法保护秒杀路径
获取商品余量
获取锁
判断是否登录
支付
进入秒杀产品详情
Q1: 消息丢失Q2: 重复消费Q3: 垃圾消息Q4: 延迟消费
结束
返回失败
倒计时结束
前端
判断秒杀路径是否准确
获取秒杀路径
1.1 Redis:获取成功?
点击秒杀(处理)
未开始
前端/ 后端也应该进行判断
其他错误
秒杀成功
记录秒杀信息到数据库
解耦、异步:高并发只是在秒杀阶段,通过解耦将其与下单、支付解耦
点击秒杀
僧多肉少( 读操作多|用户多, 写操作少|商品少)缓解DB压力
获取秒杀时间区间、服务器当前时间
1.1.1 DB:中数据存在?
减库存
Q:扣减库存导致的超卖问题?DB方案:(DB压力大,低效率)update seckill set number=number-1 where id=seckillId and number > 0;Java方案:span style=\"font-size: inherit;\
1. DB层面判断(DB压力太大)1. Redis的Set2. 布隆过滤器(A秒杀成功,但是退货了,需要撤回操作,但是BloomFilter 难以撤回)
后端
4. 扣减库存
登录
进行秒杀
释放锁
秒杀中
1. 秒杀接口控制2. nginx限流3. redis限流
0 条评论
下一页