电商秒杀平台记录 Day2

Day 2 (5/25/2024):

1.先搭建了项目所需要的环境:IntelliJ,maven,mysql,navicat等等,配置了Jmeter,学习了如何使用Jmeter测试项目

2.然后搭建好了秒杀活动的发布页面的前端部分:

3. 实现了秒杀活动发布功能:

先思考了数据库的设计:

-哪些字段是必须的

-秒杀的活动表单应该有哪些对应的字段

-然后把mybatis整合到了springboot里面去

- 先在pom.xml里添加mybatis的dependency

-然后完成了mybatis的逆向生成:创建了一个叫generatorConfig.xml的文件。再以此配置了数据库的连接

-紧接着运行 main 方法逆向生成 Mapper 相关代码

-然后去到application.properties里配置了驱动、数据源、用户密码等

- 然后用template的模版资源完成了发布页面的前端搭建

- 在controller中处理了发布页面的请求

4.实现了秒杀活动列表页面

-在springboot中处理了跳转活动列表

———————————————————————————————————————————

1 了解了秒杀流程:

1.1选择商品:

- 选择秒杀商品

1.2 创建订单:

-创建秒杀订单

-可用库存-1

-锁定库存+1

1.3 支付订单

1.4 扣减库存

2. 解决了防超卖问题

-首先先思考了秒杀为什么会导致库存超卖的原因:每个秒杀的用户都去数据库查询库存,校验库存,然后扣减库存,当用户量一大便容易导致数据库崩溃

-接着尝试了简单处理:如果库存stock > 0, 就抢购成功,available stock - 1,然后secKill ActivityDao调用update方法把库存更新。但是当使用Jmeter进行测试的时候发现抢购的成功数远大于设置的可用库存数,说明了有并发问题

-决定采用另外两种方法来解决库存超卖问题,1是数据库乐观锁,2是使用Redis lua脚本

乐观锁方案:读取库存表,判断库存(通过添加一个判断条件avaiable_stock > 0),然后扣减库存

Lua脚本方案:Lua脚本是类似于Redis事务,有一定原子性,不会被其他命令插队。

Lua脚本方案解决思路:首先用户先发出秒杀请求,Lua脚本读Redis库存并扣减,根据扣减成功分为2种情况,1.扣减失败,说明秒杀活动结束。2. 扣减成功锁定数据库库存,创建订单,如果用户付款了,才会在数据库扣减库存

所以方案就是:

-缓存库存信息,大部分数据读取请求都被 Redis 挡住了,保护了MySQL

-检查 Redis 库存和扣减 Redis 库存是两步操作,通过Lua脚本将这两步操作,合并成一个整体,保证原子操作性

-哪怕 Redis 侧放行,可以创建订单了,到 MySQL 的时候也需要再检查一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值