Java项目——黑马点评(优惠券秒杀6之优化秒杀)

一、优惠券秒杀6——Redis优化秒杀

1、 问题引出——

之前由于使用了大量的分布式锁与数据库的大量交互,虽然保证了一致性,但也造成了性能上的一些缺失。接下来就讲解如何在性能上提升——

重新梳理秒杀业务——

2、秒杀业务再梳理

总共有几下几个业务——
在这里插入图片描述
方法实现——
在这里插入图片描述

问题分析——

目前为止——
在这里插入图片描述

目前执行业务效率测试——

在这里插入图片描述

解决方案分析——

在这里插入图片描述

拆分业务解耦
用两个线程来执行不同业务(同步操作变为异步操作)**——这一点很重要,很多业务都可以这么做(类似于微服务)
在这里插入图片描述
———将优惠券信息、购买券的用户信息存入Redis
这全用lua脚本执行保证原子性,将下单用消息队列读取

在这里插入图片描述

二、解决方案执行

(一)、基于Redis完成秒杀资格判断

1、 优化NO1——将优惠券库存保存在Redis中

在这里插入图片描述

2、优化NO2——编写lua脚本——判断秒杀库存、一人一单,决定用户是否抢购成功

在这里插入图片描述
在Java中实现lua——

重要——任何业务的固定步骤————

1、编写控制类返回接口方法(事先没有该函数)
2、在接口里面自动生成方法
3、进入接口实现类里面使用快捷键自动实现该方法模版
4、流程图
5、列出主要步骤
6、代码实现

1、编写控制类返回接口方法(事先没有该函数)

在这里插入图片描述

2、在接口里面自动生成方法

在这里插入图片描述

3、进入接口实现类里面使用快捷键自动实现该方法模版

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

4、流程图

5、列出主要步骤

6、代码实现

在这里插入图片描述

在这里插入图片描述

补充——TODO

在IntelliJ IDEA中,TODO是一种特殊的代码注释,用于标记代码中需要注意、尚未完成或需要进一步处理的部分。开发者可以通过查看IDEA的TODO工具窗口,轻松地找到和管理项目中的所有TODO注释。这有助于团队更好地追踪和处理待办事项。
在这里插入图片描述

结果测试——

在这里插入图片描述

(二)、基于JDK阻塞队列完成异步下单

1、 优化NO3——如果抢购成功,将优惠券id和用户id封装后存入阻塞队列

在这里插入图片描述

子线程里面是不能拿到ThreadLocal里的内容的——

在这里插入图片描述

创建代理字段即可——

在这里插入图片描述

IDEA快速创建方法——

在这里插入图片描述

三、剩余问题——

内存溢出——

这里我们使用的是JDK里面的阻塞队列,而这个队列使用的是JDK里面的内存。如果不加以阻止,在高并发情况下可能会有无数订单对象需要创建并且放到阻塞队列里面。可能会导致将来内存溢出。

数据安全问题——

现在的服务是基于JVM内存保存的,没有持久化机制
情况一:”如果服务突然宕机了,那内存里的所有的订单信息都丢失了。用户已经付款,但是后台没有收到相关信息,出现不一致的情况。
情况二:当我们从队列里面取出订单后,在正准备执行之时,出现了异常。等回复后原本取出的订单已经不复存在了。也相当于订单丢失了。

如何解决上述问题?请点击这里——Java项目——黑马点评(优惠券秒杀7之Redis消息队列MQ实现异步秒杀。

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值