谷粒商城实战(031 业务-秒杀功能2)

Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强

总时长 104:45:00 共408P

此文章包含第315p-第p318的内容


秒杀上架

定时上架功能

@EnableAsync 异步
@EnableScheduling 定时调度
@Configuration 配置类
在这里插入图片描述
创建上架定时任务类和方法
在这里插入图片描述

在这里插入图片描述

在秒杀配置类里添加@EnableFeignClients 来开启Feign 使其具备Feign远程调用功能
然后创建一个调用优惠商品系统服务的Feign
在这里插入图片描述

计算3天的信息 使用LocalDate和LocalDateTime
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

格式化日期
在这里插入图片描述

@RableField(exist=false)这个注解代表这个字段不在数据库中存在 ,这个字段只是用来做临时封装
在这里插入图片描述
在这里插入图片描述
设置redis秒杀活动的前缀
在这里插入图片描述

由于我们调用的redisTemplate是String类型的 所以不能用List<Long>格式
stringredistemplate是用json序列化机制 而redistemplate是用jdk的序列化机制 所以存进redis会发生乱码
在这里插入图片描述

缓存活动信息
List<Long>格式改成List<String>格式
在这里插入图片描述
在这里插入图片描述
记得设置redis过期时间

设置秒杀前缀
在这里插入图片描述

将sku信息存到redis里
在这里插入图片描述
添加远程Feign接口
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这里的方法名可以修改 因为上面已经有路径了 所以改名也没事,也可以调到远程的那个方法
在这里插入图片描述

在这里插入图片描述

添加商品随机秒杀码

在这里插入图片描述

随机码是为了在秒杀开始的时候才会暴露,否则知道了action地址 会有脚本攻击
在这里插入图片描述

设置分布式信号量

如果100万的请求过来 只有100个库存,我们在这个信号量设置为100,有通过的请求减一 然后再放行查数据库等操作,如果压根就没减掉,则不需要后续操作,直接打回

在这里插入图片描述
引入redis
在这里插入图片描述

redis配置类
在这里插入图片描述

设置商品信号量的前缀
在这里插入图片描述
在这里插入图片描述

测试上架

在这里插入图片描述

改bug

改成String类型
在这里插入图片描述

改成skuid
在这里插入图片描述
也改成skuid
在这里插入图片描述

查看redis信息

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

幂等性处理

这里每次调用都会添加,需要发现如果存在就不添加
在这里插入图片描述
在这里插入图片描述
加分布式锁逻辑
在这里插入图片描述
添加锁名称
在这里插入图片描述
不管成功与否都要解锁 所以使用try-finally
建议(这锁粒度有点大 应该配合ID加锁)
在这里插入图片描述

代码判断
这里前面加锁了,所以已经是原子性的了
在这里插入图片描述
判断是否存在信号量
在这里插入图片描述

判断这个sku是否存在
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这里不用判断第三个库存,他俩是一体的
在这里插入图片描述

如果多场次的数据都有同一个商品 这里会找不到 所以我们要给这三个都加上场次
建议(秒杀场次key其实直接用ID也可以,不用时间也行)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值