Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强
总时长 104:45:00 共408P
此文章包含第319p-第p325的内容
秒杀首页编写
预告秒杀信息
创建action请求
创建service
模糊查询 使用*号
ps:redis单线程,你用keys会阻塞一段时间的,keys会阻塞其他命令执行等(后面数据量大的时候,直接影响redis的性能)
redis的一些命令
全要的话可以写0到-1就可以了,这里使用的是 -100,100
查到这个场次的全部商品信息
切记把随机码去掉
开始秒杀的时候就可以不需要清空随机码了
设置秒杀服务的网关信息
配置hosts域名
获取sku信息
创建获取sku信息的action请求
生成service
把各个并行任务用complete future执行,比你原来串行话执行好
秒杀功能设计
高并发
恶意请求 在网关层进行拦截
流量错峰 使用验证码等或者加入购物车 然后再进行付款
前端限流 按钮隔1秒才能点一次 防抖节流
降级页面 流量太多了就引导到错误页面“请稍后访问”
不支付,订单超时后会恢复库存,订单过期
登录校验功能的实现
这里对购物车按钮进行时间划分
从session里拿到场次和随机码
拦截器
秒杀流程
这里防止同一用户多次购买 可以在购买成功后在redis里加一个数据,用 用户id+场次id+sku的Id,场次结束的时候失效,否则会越来越多,过期时间是结束时间减去当前时间
然后用redis SETNX(不存在才占位) 来判断
使用信号量,acquire方法会阻塞redis 所以我们不使用这个方法
我们使用tryAcquire方法(快速尝试方法)
这样看120毫秒就可以快速释放了
不要纠结,不释放信号量,信号量就回不去
这段验证逻辑可以直接放在Nginx中来实现,项目中只写真正的下单逻辑即可
配置rabbitMQ
流量削峰
引入amqp包
配置rabbit
写配置类
创建秒杀实体类
创建队列和绑定关系
订单放到消息队列里后就可以慢慢处理了,用feign远程调用没关系的。
信号量设置不用等待
查看运行时间 这里只花费了12ms
页面展示
秒杀服务不去调用其他的服务 只是向mq发送数据 由mq进行调用